style body attribute javascript html wmd html-sanitizing

body - Simple HTML desinfectante en Javascript



title css (2)

Debería echarle un vistazo al recomendado en esta pregunta. Desinfectar / Reescribir HTML en el lado del cliente

Y solo para estar seguro de que no necesita hacer más acerca de XSS, revise las respuestas a esta. Cómo prevenir ataques de inyección de Javascript dentro del HTML generado por el usuario.

Estoy buscando un simple desinfectante HTML escrito en JavaScript. No es necesario que sea 100% seguro.

Estoy implementando Markdown y el editor de WMD Markdown (la rama maestra SO de github) en mi sitio web. El problema es que el HTML que se muestra en la vista previa en vivo no se filtra, como aquí en SO. Estoy buscando un desinfectante HTML simple / rápido escrito en JavaScript para poder filtrar el contenido de la ventana de vista previa.

No es necesario un analizador completo con protección XSS completa. No estoy enviando la salida al servidor. Estoy enviando el Markdown al servidor donde uso un desinfectante HTML completo y correcto antes de almacenar el resultado en la base de datos.

Google está siendo absolutamente inútil para mí. Acabo de recibir cientos de artículos (a menudo incorrectos) sobre cómo filtrar el javascript del HTML generado por el usuario en todo tipo de lenguajes del lado del servidor.

ACTUALIZAR

Explicaré un poco mejor por qué necesito esto. Mi sitio web tiene un editor muy similar al de StackOverflow. Hay un área de texto para ingresar la sintaxis de MarkDown y una ventana de vista previa debajo que muestra cómo se verá después de haberla enviado.

Cuando el usuario envía algo, se envía al servidor en formato MarkDown. El servidor lo convierte a HTML y luego ejecuta un desinfectante HTML en él para limpiar el HTML. MarkDown permite HTML arbitrario, así que necesito limpiarlo. Por ejemplo, el usuario escribe algo como esto:

<script>alert(''Boo!'');</script>

El convertidor de MarkDown no lo toca ya que es HTML. El desinfectante de HTML lo eliminará para que el elemento de script se haya ido.

Pero esto no es lo que sucede en la ventana de vista previa. La ventana de vista previa solo convierte MarkDown a HTML pero no la desinfecta. Por lo tanto, la ventana de vista previa tendrá un elemento de script. Esto significa que la ventana de vista previa es diferente de la representación real en el servidor.

Quiero arreglar esto, así que necesito un desinfectante de JavaScript HTML rápido y sucio. Algo simple con una lista negra de elementos / atributos básicos y listas blancas servirá. No es necesario que XSS sea seguro porque la protección XSS se realiza mediante el desinfectante HTML del lado del servidor.

Esto es solo para asegurarse de que la ventana de vista previa coincida con la representación real del 99,99% del tiempo, lo cual es lo suficientemente bueno para mí.

¿Puede usted ayudar? ¡Gracias por adelantado!


para mi función solo me ha importado que la cadena no esté vacía y contenga solo caracteres alfanuméricos. Esto usa JS simple y no hay terceras bibliotecas ni nada. Contiene una expresión regular larga, pero cumple con su cometido;) Puede basarse en esto pero hacer que su expresión regular sea algo más parecido a ''<script> | </ script>'' (con caracteres escapados donde sea necesario, y menos los espacios). ;)

var validateString = function(string) { var validity = true; if( string == '''' ) { validity = false; } if( string.match( /[ |<|,|>|/.|/?|//|:|;|"|''|{|/[|}|/]|/||//|~|`|!|@|#|/$|%|/^|&|/*|/(|/)|_|/-|/+|=]+/ ) != null ) { validity = false; } return validity; }