The idea is to provide a fallback that prevents (inline) JavaScript for browsers that do not support CSP.
Ricorda che CSP non deve essere usato come prima linea di difesa. Dovresti codificare correttamente per contesto per impedire XSS nella tua applicazione. OWSAP ha buone informazioni su questo.
Detto questo, CSP può essere un buon ripiego per rendere l'XSS molto meno serio, nel caso in cui una vulnerabilità XSS (ovvero codifica errata o non codificata in qualche punto della pagina) venga trovata nell'applicazione e sfruttata.
I know that it is possible to overwrite existing functions, but it's not clear to me how exactly this would work.
È molto facile da fare. Ad esempio, XMLHttpRequest = myFunction
o XMLHttpRequest = null
impedirebbe agli script di utilizzare XMLHttpRequest
direttamente.
Il problema è che se un attaccante non può usare quella particolare funzione e se l'attaccante sa che lo stai facendo, potrebbe facilmente usare un metodo alternativo.
Mentre potrebbe essere possibile sovrascrivere le funzioni tutte , non è consigliabile come soluzione affidabile.
Is there a trivial solution that 100% prevents any further script execution?
Se hai un errore di sintassi nella tua <script>
, allora non verrà eseguito nulla in quel <script>...</script>
. Sfortunatamente, con XSS, l'autore dell'attacco potrebbe facilmente avviare un nuovo <script>
che funzionerebbe perfettamente.
Ci sono molti modi per iniettare JavaScript oltre a <script>
, ad esempio <img onload>
o onerror
.
Per quanto ne so, non puoi fermare in modo affidabile tutto il seguente codice HTML dal contenere l'esecuzione XSS.
If not, are there solutions that work in most contexts or for most browsers (and ways to bypass them for other contexts/browsers)?
Il supporto per browser versione 1 di CSP è che inizia ad essere buono , e dal momento che CSP è stato progettato come backup in ogni caso (non un primo linea di difesa) potresti riuscire a interrompere la tua ricerca sapendo che il supporto del browser costituirà un problema di riduzione.
Detto questo, penso che l'idea di sovrascrivere le funzioni potrebbe fare molto per raggiungere il successo. Sembra che possa funzionare in modo in teoria in modo affidabile. Anche se questo non è raccomandato, penso che sarebbe uno studio interessante. Mi chiedo quanto sarebbe complesso da implementare.