Mi sembra che, poiché gli utenti possono inserire domande e commenti al loro interno con markup HTML (possibilmente tag <script>
), i siti Stack Exchange sarebbero molto esposti agli attacchi XSS. Come proteggono da questo?
Per i commenti generali, i tag dello script sono correttamente escaped , in modo che sia interpretato come testo anziché come codice effettivo . In questo caso, questo genere di cose viene gestito tramite una cosa conosciuta come codifica HTML, in cui il tuo tag <script>
viene convertito in <script>
e sottoposto a rendering come stringa di testo anziché interpretato come codice.
Detto questo, StackOverflow ha lavorato su una nuova funzionalità che consente l'esecuzione di javascript nelle risposte delle persone: link
Alcuni dei punti di sicurezza dall'articolo che voglio evidenziare:
Are Stack Snippets Safe?
Yes, as much as the web in general is safe. You are not in any more danger than you are when browsing any site with JavaScript enabled. With that said, the snippets are running client code in your browser, and you should always exercise caution when running code contributed by another user. We isolate snippets from our sites to block access to your private Stack Exchange data:
•We use HTML5 sandboxed iframes in order to prevent many forms of malicious attack.
•We render the Snippets on an external domain (stacksnippets.net) in order to ensure that the same-origin policy is not in effect and to keep the snippets from accessing your logged-in session or cookies.
Like all other aspects of our site, Stack Snippets are ultimately governed by the community. Because users can still write code that creates annoying behaviors like infinite loops or pop-ups, we disable snippets on any post that is heavily downvoted (scoring less than -3 on Stack Overflow, -8 on Meta). If you see bad code that you think should be disabled, downvote the post. If you see code that is intended to be harmful (such as an attempt at phishing), you should flag it for moderator attention.
Ciò avviene disinfettando i dati immessi dagli utenti e convertendoli in un formato sicuro per la visualizzazione sullo schermo. In pratica, prendi l'input dell'utente e converti i caratteri speciali (& lt ;, & gt ;, /, \, etc) in entità html, che li rende innocui per la visualizzazione su una pagina web.
Leggi altre domande sui tag html javascript xss