0

我想知道 trim()、strip_tags() 和 addlashes() 的组合是否足以过滤来自 $_GET 和 $_POST 的变量值

4

3 回答 3

2

这取决于您要执行哪种验证。

以下是一些基本示例:

  • 如果要在 MySQL 查询中使用数据,请确保对数据使用 mysql_real_escape_query() 而不是 addlashes()。
  • 如果它包含文件路径,请务必删除“../”部分并阻止对敏感文件名的访问。
  • 如果要在网页上显示数据,请确保在其上使用 htmlspecialchars()。

但最重要的验证是只接受你期望的值,换句话说:当你期望数字时只允许数值,等等。

于 2009-12-09T03:39:50.973 回答
1

简短的回答:没有。

长答案:这取决于。

基本上,如果不考虑您想用它做什么,您就不能说一定量的过滤是否足够。例如,上面将允许通过“javascript:dostuff();”,如果您碰巧在链接的 href 属性中使用了这些 GET 或 POST 值之一,这可能是可以的,也可能不是。

同样,您可能有一个富文本区域,用户可以在其中进行编辑,因此从中剥离标签并不完全有意义。

我想我想说的是,有一套简单的步骤来清理你的数据,这样你就可以把它划掉并说“完成”。您总是必须考虑这些数据在做什么。

于 2009-12-09T03:36:37.420 回答
1

这在很大程度上取决于您将在哪里使用它。

  • 如果您要将内容显示为 HTML,请绝对确保您正确指定了编码(例如:UTF-8)。只要你去掉所有标签,你应该没问题。
  • 对于在 SQL 查询中使用,addslashes 是不够的!例如,如果您使用 mysqli 库,您想查看mysql::real_escape_string。对于其他数据库库,使用指定的转义函数!
  • 如果您要在 javascript 中使用字符串,则添加斜杠是不够的。
  • 如果您对浏览器错误感到偏执,请查看OWASP 改革库
  • 如果您在 HTML 以外的其他上下文中使用数据,则应用其他转义技术。
于 2009-12-09T03:37:51.460 回答