据我所知,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);"
?
答案 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")
我确信有一种更清洁的方法。