我总是通过html实体和mysql真实转义字符串函数运行用户提供的输入。
但是现在我正在构建一个CMS,它在管理部分有一个WYSIWYG编辑器。我注意到在WYSIWYG编辑的用户内容上使用htmlentities()删除了所有样式,并在前端文章页面上引发了一堆引号(可以预期)。
在这种情况下,不清除用户输入的html / javascripts是否可以?我仍然会使用不冲突的mysql_real_escape_string()。
虽然管理员是唯一一个可以访问后端的人,但我可以想到至少有一个场景,假设黑客以某种方式获得了创建帖子页面的权限,现在虽然他们可以通过删除帖子造成严重破坏等等,他们选择使用此作为通过发布此帖子将访问者发送到他的网站的机会:
<script>window.location = "http://evilsite.com"</script>
那我该怎么办?还有哪些功能会禁用javascript而不是html和内联css?
顺便说一句,WYSWYG是TinyMCE。
答案 0 :(得分:6)
不能清除用户输入。任何人都可以破坏你的系统,就像你假设的那样。这种风险根本不值得。
虽然,对于您的情况,它取决于您使用的WYSIWYG编辑器。查看TinyMCE的文档或四处询问,看看它在富文本编辑器中显示/呈现HTML输出的内容与XSS漏洞有关。