我正在 Codeigniter 中开发一个评论系统,希望能得到一些关于我应该采用什么样的验证规则的建议。我不想允许任何图像或其他任何 HTML。
到目前为止,我只有trim
并max_length
设置。htmlspecialchars
在插入数据库之前,我还会运行内容。我在全球范围内启用了 XSS 过滤。
我还应该采取哪些其他预防措施?htmlspecialchars 是否足以防止输入 Javascript 或其他恶意代码?
我正在 Codeigniter 中开发一个评论系统,希望能得到一些关于我应该采用什么样的验证规则的建议。我不想允许任何图像或其他任何 HTML。
到目前为止,我只有trim
并max_length
设置。htmlspecialchars
在插入数据库之前,我还会运行内容。我在全球范围内启用了 XSS 过滤。
我还应该采取哪些其他预防措施?htmlspecialchars 是否足以防止输入 Javascript 或其他恶意代码?
您可能应该对 required 和 max_length 进行常规表单验证,并且显然在将内容推送到数据库之前进行 xss 过滤。htmlspecialchars 应该只应用于不在标签中的字符,所以你不能直接做 htmlspecialchars。你需要:
<br/>
1 - 像“ ”或“ ”一样剥离标签元素(并存储它们)<b>
,但不剥离它们的内容,这意味着“ <b>
”和“ </b>
”内没有任何内容。您可以使用preg_match来做到这一点。
2 - 对所有剩余文本执行 htmlentities
3 - 删除所有不需要的显式标签(从存储的标签束中)
strip_tags ( string $str [, string $allowable_tags ] )
4 - 然后过滤属性和内容的允许标签。黑客使用类似代码的情况并不少见
<b onMouseOver="window.open(..)"></b>
要解决这个问题,要么你必须做一些额外的工作,并且可能使用一些正则表达式。如果您希望我编写更多示例代码,请告诉我。
6 - 将标签元素重新添加回文档。
我现在基本上就是把这个煮熟了。该算法可以提高效率(即先去除不需要的标签,然后继续过滤 html 实体和标签内容),但我会留给你。
据我所知,这是目前潜在的黑客攻击。不过,可能还有其他方法可以破解您的输入,因此您可能想检查一下其他评论框系统使用哪些其他评论框系统进行验证,例如phpbb 论坛系统。另一种选择可能是使用 phpbb 方括号格式来处理标签,这样您就不会让用户输入任何 html 标签,而是使用您控制的方括号标签。
这回答了你的问题了吗 ?