La idea es proporcionar un respaldo que impida (en línea) JavaScript para los navegadores que no admiten CSP.
Tenga en cuenta que la CSP no debe usarse como primera línea de defensa. Debería codificar adecuadamente por contexto para evitar XSS en su aplicación. OWSAP tiene buena información sobre esto.
Dicho esto, el CSP puede ser un buen recurso para hacer que XSS sea mucho menos serio, en caso de que se encuentre una vulnerabilidad de XSS (es decir, una codificación incorrecta o nula en algún lugar de su página) en su aplicación y se aproveche.
Sé que es posible sobrescribir las funciones existentes, pero no me queda claro cómo funcionaría exactamente esto.
Es muy fácil de hacer. Por ejemplo, XMLHttpRequest = myFunction
, o XMLHttpRequest = null
evitaría que los scripts usen XMLHttpRequest
directamente.
El problema es que si un atacante puede no estar usando esa función en particular, y si el atacante sabe que estás haciendo esto, podría usar fácilmente un método alternativo.
Si bien podría ser posible sobrescribir todas las funciones todas , no se recomienda como una solución confiable.
¿Existe una solución trivial que el 100% impida la ejecución de secuencias de comandos adicionales?
Si tiene un error de sintaxis en su <script>
, entonces no se ejecutará nada en ese <script>...</script>
. Desafortunadamente, con XSS, el atacante podría comenzar fácilmente un nuevo <script>
que funcionaría bien.
También hay muchas formas de inyectar JavaScript además de <script>
, por ejemplo, <img onload>
o onerror
.
Que yo sepa, no puede impedir de manera confiable que todos los siguientes HTML contengan la ejecución de XSS.
Si no es así, ¿hay soluciones que funcionen en la mayoría de los contextos o para la mayoría de los navegadores (y formas de omitirlos para otros contextos / navegadores)?
El soporte del navegador CSP versión 1 es empieza a ser bueno , y dado que CSP fue diseñado como una copia de seguridad de todos modos (no es la primera línea de defensa) usted puede detener su búsqueda allí sabiendo que el soporte del navegador será un problema cada vez menor.
Dicho esto, creo que la idea de sobrescribir las funciones podría hacer mucho para el éxito. Parece que así podría funcionar de manera confiable en teoría . Si bien esto no es recomendable, creo que sería un estudio interesante. Me pregunto cuán complejo sería implementar.