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