¿Cómo “normalizar” un archivo html?

1

Dado un archivo HTML, cuyo contenido se generó a partir de varios sitios web, podría tener problemas de seguridad potenciales, como:

<script>alert("XSS alert!")</script>

P: ¿Qué podemos hacer para "borrar" este archivo HTML? Ejecutar un:

sed '/<script/d'

varias veces? (el " <script " podría estar oculto en HTML, como: " &lt;script ")

    
pregunta newuser999 23.09.2013 - 12:56
fuente

2 respuestas

3

Dado que el HTML fue ensamblado a partir de fuentes heterogéneas, es probable que no esté interesado en ningún script que pueda contener. Entonces tu enfoque me parece viable.

Creo que el enfoque más práctico y fácil de mantener sería hacer una lista de permitidas etiquetas y atributos HTML (es probable que no desee, más que simplemente no necesita , Código CSS, por lo que los atributos id , style y class se pueden descartar por completo). Es muy probable que las etiquetas como IFRAME y los atributos como onfocus no se incluyan en la lista.

Una vez que tenga esto, puede ejecutar su HTML a través de un analizador que eliminará cualquier etiqueta y atributo desconocido. Si lo desea, puede hacer esto en dos etapas, un limpiador "tagsoup" (HTML Tidy o TagSoup o HTMLClean o BeautifulSoup - probaría HTML Tidy primero) y un analizador HTML completo.

De esta manera, terminarías con un código HTML bien formado y desfigurado que se puede manipular mucho mejor y con mayor seguridad.

Evitaría la coincidencia de expresiones regulares a menos que realmente no tuviera otra alternativa.

    
respondido por el LSerni 23.09.2013 - 15:50
fuente
1

El problema con el enfoque sed es esta entrada maliciosa: <scr<script>ipt> . (Aplícale tu sed y mira lo que sale). Si solo intentas desinfectar las cosas malas, los chicos malos encontrarán la forma de hacerlo. En cambio, es mucho más seguro que una vez que reconozca la entrada incorrecta, se niegue a aceptarla.

Incluso más seguro es una lista blanca.

    
respondido por el John Deters 23.09.2013 - 21:23
fuente

Lea otras preguntas en las etiquetas