【问题标题】:Validation for comment forms评论表单的验证
【发布时间】:2012-08-15 18:11:22
【问题描述】:

我正在 Codeigniter 中开发一个评论系统,希望能就我应该采用什么样的验证规则提供一些建议。我不想允许任何图像或其他任何 HTML。

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

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

【问题讨论】:

  • 在将其放入数据库之前,您应该通过htmlspecialchars 运行它。转义时,您应该在最后一刻进行,以便数据可用于其他目的。在这种情况下,输出到页面时应该是htmlspecialcharsing。
  • 如果您根本不需要 HTML,请在输入中使用 strip_tags

标签: php validation codeigniter


【解决方案1】:

您可能应该在 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 标签,而是使用您控制的方括号标签。

这能回答你的问题吗?

【讨论】:

  • 是的,这是一个很好的答案。我一直在研究 HTMLPurifier,我认为它有助于正确处理标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多