test sheet script online evasion data cheat bypass html security filter xss grammar

html - sheet - xss js



Escribir el filtro XSS para(X) HTML basado en la lista blanca (3)

Como mencionaste, hay varias implementaciones PHP de esto, pero no conozco ninguna en C ++, ya que ese no es un lenguaje típicamente aplicado al desarrollo web. En general, dependerá de qué tan compleja sea la implementación que desee.

Una lista blanca muy restrictiva es probablemente la forma "más simple", pero si quieres ser realmente exhaustivo, buscaría realizar una conversión de una de las versiones establecidas a C ++, en lugar de tratar de escribir la tuya desde cero. Hay tantos trucos de qué preocuparse, que creo que sería mejor que te enfrentaras a los demás que ya han pasado por todo eso.

No sé nada sobre el uso de C ++ para el desarrollo web, pero la conversión de PHP a él no parece ser una tarea particularmente difícil, PHP realmente no tiene ninguna capacidad mágica que C ++ no pueda duplicar. Estoy seguro de que habrá algunos pequeños problemas, pero en general si quieres ir a la ruta más compleja, definitivamente sería más rápido hacer una conversión que un diseño completo desde cero.

HTML Purifier parece una implementación fuerte de PHP que todavía se mantiene activamente, hay un documento de comparación donde el autor analiza algunas diferencias entre su enfoque y el de otros, que probablemente valga la pena leer.

Sea lo que sea que se te ocurra, definitivamente pruébalo con todos los ejemplos que enlazas, y asegúrate de que pase todos esos. ¡Buena suerte!

Necesito implementar un filtro XSS simple y eficiente en C ++ para CppCMS . No puedo usar filtros existentes de alta calidad escritos en PHP porque es un marco de alto rendimiento que usa C ++.

La idea básica es proporcionar un filtro que tenga una lista de etiquetas HTML y una lista blanca de opciones para estas etiquetas. Por ejemplo. la entrada HTML típica puede consistir en etiquetas <b> , <i> , etiquetas y <a> con href . Pero la implementación directa no es lo suficientemente buena, porque incluso los enlaces simples permitidos pueden incluir XSS:

<a href="javascript:alert(''XSS'')">Click On Me</a>

Hay muchos otros ejemplos que se pueden encontrar allí . Así que también pensé en la posibilidad de crear una lista blanca de prefijos para etiquetas como href / src, por lo que siempre debo verificar si comienza con (https?|ftp)://

Preguntas:

  • ¿Estas suposiciones son lo suficientemente buenas para la mayoría de los propósitos? Lo que significa que si no doy opciones para las etiquetas de style y compruebo src / href usando la lista blanca de prefijos, ¿resuelve los problemas de XSS? ¿Hay problemas que no pueden solucionarse de esta manera?
  • ¿Hay alguna buena referencia para la gramática formal de HTML / XHTML para escribir un analizador simple que elimine todas las etiquetas prohibidas como <script>

Puede echar un vistazo al proyecto Anti Samy, tratando de lograr lo mismo. Sin embargo, es Java y .NET.

Editar 1, un poco extra:

Usted puede llegar a una lista blanca muy estricta. Debería estar bien estructurado y debería ser bastante ajustado y no demasiado flexible. Cuando combina flexibilidad, tantas etiquetas, atributos y diferentes navegadores, generalmente termina con una vulnerabilidad XSS.

No sé cuáles son sus requisitos, pero elegiría un soporte de etiquetas estricto y simple (solo b li h1, etc.) y luego un estricto soporte de atributos basado en la etiqueta (por ejemplo src solo es válido bajo la etiqueta href), entonces necesitas hacer una lista blanca en los valores de los atributos como dijiste http | https | ftp o style = "color | color de fondo", etc.

Considera este:

<x style="express/**/ion:(alert(/bah!/))">

También debe pensar en la inclusión de alguna lista blanca de caracteres o en alguna normalización UTF-8, ya que las diferentes codificaciones pueden causar problemas incómodos. Como nuevas líneas en atributos, secuencias UTF-8 no válidas.


Todos los detalles del análisis HTML se especifican en HTML 5 . Sin embargo, su implementación es bastante trabajo, y no importa si analizará HTML exactamente con todos los casos de esquina. En el peor de los casos, terminará con DOM diferente, pero debe desinfectar DOM de todos modos.