2011-07-28 9 views
7

Por lo que yo he dado cuenta de TinyMCE hace su propio escape de meta caracteres, y el uso de htmlspecialchars() después sólo estorbar la salida y mostrar < p> etiquetas y similares en vez de renderizarlos en el navegador. Es fácil desactivar Javascript e ingresar código malicioso que se representará cuando otro usuario con Javascript activado visite el contenido.La protección contra XSS cuando se utiliza TinyMCE

Necesito usar la validación adecuada del lado del servidor, pero exactamente - cómo - ¿puedo hacerlo correctamente teniendo en cuenta las miles de técnicas XSS que hay? ¿Hay alguna manera eficiente que funcione para TinyMCE, como "usar htmlspecialchars() junto con TinyMCE?"

Hasta ahora he hecho una lista blanca de las etiquetas HTML permitidas, reemplazado cualquier javascript: y similares :void dentro del contenido para tratar de proteger contra la línea Javascript como onClick="javascript:void(alert("XSS"));", pero siento que esto no es suficiente.

Cualquier consejo sobre el tema sería muy apreciada, pero recuerde que necesita cierto contenido que se muestra correctamente en la salida, es por eso que uso TinyMCE en el primer lugar. Solo necesito estar protegido contra el XSS.

Además, sobre el tema; ¿Cómo puedo protegerme contra CSS XSS como style="background-image: url(XSS here);"?

Respuesta

0

Para .Net: http://msdn.microsoft.com/en-us/security/aa973814.aspx

también combatir el fuego con el fuego usando:

$(".userpost").children().off(); 

Esto evita que los usuarios que explotan el JavaScript existente. Una de las mayores molestias a la biblioteca de Microsoft es que agrega "x_" al frente de todas las clases. Lo cual está bien hasta que alguien edite una entrada existente y agrega otra x_ en el frente. Me deshago de la x_ all junto con la expresión regular, ya que el código anterior hace que el prefijo "x_" no tenga sentido.

Esto elimina el "x_" por 3 clases en VB.Net:

Regex.Replace(myHtml, "(<\w+\b[^>]*?\b)(class="")x[_]([a-zA-Z]*)()?(?:x[_])?([a-zA-Z]*)?()?(?:x[_])?([^""]*"")", "$1$2$3$4$5$6$7") 

Estoy seguro de que hay una forma más limpia de hacerlo.

Cuestiones relacionadas