php - 评论表单验证

标签 php validation codeigniter

我正在 Codeigniter 中开发评论系统,并且希望得到一些关于我应该采用哪种验证规则的建议。我不想允许任何图像或其他任何 HTML。

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

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

最佳答案

你可能应该做一个常规的 form validation on required 和 max_length,显然在将内容推送到数据库之前进行 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 标签,而是使用您控制的方括号标签。

这能回答你的问题吗?

关于php - 评论表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11974703/

相关文章:

javascript - Codeigniter ajax表单验证错误

php - 您将在何处以及如何(实际上)在 PHP 中使用 Closure 接口(interface)?

php - 防止在 Web 应用程序中直接 URL 访问 PHP 文件

php - 如何在 .inc 文件中声明变量?

c - scanf验证C

php - Laravel max 验证无法正常工作

validation - 使用 express-validator 验证密码

javascript - PHP 不会从 HTML 联系表单中提取输入

php - GROUP BY 与事件记录?

Codeigniter - 防止重复提交