Desinfección de JavaScript para evitar XSS

2

Estoy realizando un ejercicio de corrección de vulnerabilidades para un cliente y estoy tratando de encontrar la mejor manera de mitigar este agujero en particular. Hay un script en nuestro sitio que muestra el contenido en una nueva ventana usando <%= %> . Esencialmente, esto requiere un enlace codificado en un archivo de inclusión que se parece a algo como

<a href="/path/to/script?x=/path/to/linked/thing.img" target="">link</a>

y lo muestra en la página resultante dentro de html usando un script que parece algo como:

<img src="<% =request.querystring("x") %>">

Este script está en cientos de aplicaciones, por lo que estoy tratando de encontrar la manera más eficiente de mitigarlo. ¿Debo usar buscar y reemplazar para eliminar la secuencia de comandos de los archivos de inclusión o hay una manera de limpiar la secuencia de comandos real utilizando algo que no sea <%= %> ?

Todo está heredado, es super clunky y necesita ser reemplazado de todos modos, pero como dije, estamos hablando de cientos de archivos aquí, y no todos siguen la misma sintaxis, por lo que no puedo ejecutar una búsqueda por lotes y Reemplazar por todos ellos. Tendrá que ser en pequeños lotes y todavía tendré que ir a cada uno para comprobar si algo se rompió. Mátame ahora.

Soy un diseñador / desarrollador front-end, no soy un experto en seguridad (y tampoco soy un experto en JavaScript), por lo que cualquier ayuda aquí sería muy apreciada.

    
pregunta kristina childs 28.03.2013 - 19:28
fuente

1 respuesta

1

Una forma simple sería crear una lista blanca de caracteres, como barras diagonales y alfanuméricas, y asegurarse de que el archivo existe en su sistema de archivos local. Desea evitar tener: <img src="javascript:..."> y tal.

Para esto, recomiendo hacer una función que diga sanitize() que filtre los caracteres no deseados, y envolverlos con cada uno

<img src="<% =sanitize(request.querystring("x")) >">

Dependiendo de la estructura que estés usando (ASP, Ruby, ...) tal vez puedas mono patch el código, de modo que request.querystring() siempre devuelva una versión desinfectada.

    
respondido por el ndrix 28.03.2013 - 20:01
fuente

Lea otras preguntas en las etiquetas