使用TinyMCE时防止XSS

时间:2011-07-28 02:54:53

标签: tinymce xss

据我所知,TinyMCE会自行转义元字符,之后使用 htmlspecialchars()只会使输出混乱并显示< p> 标签等,而不是在浏览器中呈现它们。关闭Javascript并输入恶意代码是一件容易的事情,当打开Javascript的其他用户访问内容时,这些代码将会被呈现。

所以我需要使用正确的服务器端验证,但确切地说 - 如何 - 考虑到成千上万的XSS技术,我能否正确地做到这一点?是否有适用于TinyMCE的有效方法,例如“将 htmlspecialchars()与TinyMCE一起使用?”

到目前为止,我已为允许的HTML标记制作了一个白名单,替换了内容中的所有javascript:和类似的:void,以尝试防范内联Javascript,例如onClick="javascript:void(alert("XSS"));",但我觉得这还不够。

对此主题的任何建议都将非常感激,但请记住某些内容需要在输出上正确显示,这就是我首先使用TinyMCE的原因。我只需要受到XSS的保护。

此外,在这个问题上;如何保护自己免受CSS XSS的影响,例如style="background-image: url(XSS here);"

2 个答案:

答案 0 :(得分:2)

HTMLPurifier是php的一个解决方案:http://hp.jpsband.org/

答案 1 :(得分:0)

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

我还用火来灭火:

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

这可以防止用户利用您现有的JavaScript。微软图书馆最大的烦恼之一就是在所有课程前加上“x_”。在有人编辑现有条目并且在前面添加另一个x_之前,这是好的。因为上面的代码使得“x_”前缀毫无意义,所以我只是将x_ all与regex一起删除。

这将删除VB.Net中3个类的“x_”:

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

我确信有一种更清洁的方法。