验证评论表格

时间:2012-08-15 18:11:23

标签: php validation codeigniter

我正在编写Codeigniter中的评论系统,并希望就我应该使用哪种验证规则提出一些建议。我不想允许任何图片或其他任何HTML。

到目前为止,我只设置了trimmax_length。在插入数据库之前,我还通过htmlspecialchars运行内容。我全局启用了XSS过滤。

我应该采取哪些其他预防措施? htmlspecialchars是否足以阻止输入Javascript或其他恶意代码?

1 个答案:

答案 0 :(得分:3)

你应该在required和max_length上做一个常规的form validation,显然是在将东西推送到数据库之前进行xss过滤。 htmlspecialchars应该只应用于不在标签中的字符,因此您不能直接执行htmlspecialchars。你需要:

1 - 删除标记元素(并存储它们),例如“<br/>”或“<b>”,但不删除它们的内容,这意味着“<b>”和“ </b>”。您可以使用preg_match

执行此操作

2 - 对所有剩余文本执行htmlentities

3 - 删除所有不需要的显式标签(来自存储的标签串)

strip_tags ( string $str [, string $allowable_tags ] )

4 - 然后过滤允许的属性和内容标签。黑客使用像

这样的代码并不罕见
<b onMouseOver="window.open(..)"></b>

要解决这个问题,要么你需要做一些额外的工作,也许可以使用一些正则表达式。如果您希望我写一些示例代码,请告诉我。

6 - 将标签元素重新添加回文档。

我现在基本上已经熟了这个。该算法可以提高效率(即首先剥离不需要的标签,然后继续过滤html实体和标签内容),但我会把它留给你。

据我所知,这是潜在的黑客攻击。可能还有其他方法可以破解您的输入,因此您可能需要检查其他用于验证的评论框系统,例如phpbb forum system。另一种选择可能是使用phpbb方括号格式来处理标签,这样你就不会让用户输入任何html标签,而是使用你控制的方括号标签。

这会回答你的问题吗?