Necesito verificar si el HTML enviado por el usuario contiene JavaScript. Estoy usando PHP para la validación.

4
David 1 oct. 2009 a las 14:23

5 respuestas

La mejor respuesta

Puede ser mejor adoptar un enfoque diferente y usar algo como HTML Purifier para filtrar todo lo que no desea . Creo que sería muy difícil eliminar de forma segura cualquier posibilidad de javascript sin analizar el HTML correctamente.

4
Tom Haigh 1 oct. 2009 a las 10:34

Tendrá que buscar etiquetas <script> pero también tendrá que buscar atributos como onclick="" o onmouseover="" etc ... que pueden tener JavaScript sin la necesidad de las etiquetas de script .

0
Evernoob 1 oct. 2009 a las 10:34

Puede eliminar las etiquetas de script como dice Pawka utilizando expresiones regulares. Encontré un hilo en este aquí.

Básicamente es:

$list=preg_replace('#<script[^>]*>.*?</script>#is','',$list);

El código es de esa página, no escrito por mí.

0
KB22 1 oct. 2009 a las 10:28

OK, no todos seamos ingenuos aquí:

<script> "<!-- </script> -->"; document.write("hello world"); </script> (debe pasar los filtros sugeridos por regexadvice)

El filtrado de JavaScript es una cuestión de seguridad crítica, lo que significa que debe hacerlo de manera exhaustiva y adecuada, no un truco rápido.

2
OJW 1 oct. 2009 a las 10:40

Si desea protegerse contra las secuencias de comandos entre sitios (XSS), debería utilizar una lista blanca que una lista negra. Porque también hay muchos aspectos que debe tener en cuenta al buscar ataques XSS.

Simplemente haga una lista de todas las etiquetas y atributos HTML que desea permitir y elimine / escape todas las demás etiquetas / atributos. Y para aquellos atributos que pueden usarse para ataques XSS, valide los valores para permitir solo valores inofensivos.

7
Gumbo 1 oct. 2009 a las 10:36