No debe intentar hacer esto, ya que no hay forma de detectar todos los scripts maliciosos. Hay varias formas de ocultarlo, ya que no está bien presentado dentro de las etiquetas <script>
. Toma esta por ejemplo:
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^'=alert("XSS")>
Echa un vistazo a la XSS Filter Evasion Cheat Sheet para algunos otros ejemplos.
Si está mostrando los archivos cargados en HTML, debe establecer una Política de seguridad de contenido para evitar que se ejecuten JavaScript y CSS en línea. (Usando CSS es posible incrustar JavaScript. Algunas versiones de Internet Explorer lo admiten)
El CSP puede evitar el script en línea, pero permite que el script se ejecute en archivos externos js
desde su servidor o desde fuentes confiables (como el CDN de Google).
Debería asegurarse de que primero valide que el navegador es compatible con CSP (podría implementar una prueba para esto en una página antes de mostrar el contenido), y podría hacerlo en combinación con un desinfectante HTML que procesa la página. contenido solo en salida al navegador. Este será un acercamiento de cinturón y tirantes. Debería utilizar una solución bien probada para el saneamiento, como OWASP AntiSamy . Se han encontrado vulnerabilidades en versiones anteriores de la mayoría de los desinfectantes (incluso en este caso), pero usarlo en combinación con un CSP evitaría la mayoría de los ataques, ya que esto le daría la oportunidad de parchear a la última versión.
La otra opción sería agregar el encabezado Disposición del contenido a cualquier contenido servido, para que se descargue a la máquina del usuario en lugar de mostrarse en un navegador en el contexto de su dominio. Cualquier código que se ejecute en el contexto de su dominio puede aprovechar la Same Origin Policy para atacar a los usuarios que ven el contenido. Esto no sería posible sin conexión (Internet Explorer muestra un mensaje de advertencia con un mensaje de confirmación, y los navegadores como Chrome y Firefox consideran el sistema de archivos como el origen null
para detener el script que accede al contenido en línea).