Ho un'applicazione web giocattolo che può essere descritta approssimativamente come un archivio di valori-chiave per utente. Dopo aver effettuato l'accesso, l'utente può visualizzare e modificare il suo insieme di coppie chiave-valore. Le chiavi e i valori sono memorizzati in un database sul server. Le chiavi o i valori non sono condivisi tra gli utenti in alcun modo.
Ho appena scoperto che il codice JavaScript incluso nelle chiavi o nei valori non era stato correttamente scappato. Quindi, se un utente ha aggiunto una chiave foo
con un valore di bar <script>alert(1)</script>
, lo script verrebbe eseguito nel browser dell'utente.
Ovviamente l'ho risolto non appena l'ho notato. Ma mi è stato chiesto: Questo può essere sfruttato per fare qualcosa di dannoso? Ricorda che le coppie chiave-valore vengono SOLO mostrate all'utente che le ha create.
(L'unico scenario che mi viene in mente è piuttosto esagerato: un utente malintenzionato convince l'utente a navigare verso la mia applicazione Web e quindi a fare clic su un bookmarklet canaglia. Il bookmarklet salva una coppia chiave-valore con uno script che ruba il coppie di valori-chiave dell'utente. Poiché questo è persistente nel database, le coppie valore-chiave verranno inviate all'avversario ogni volta che l'utente carica la pagina, ma con un bookmarklet canaglia è comunque possibile fare quasi tutto ...)