在PHP中过滤用户输入

时间:2009-12-09 03:29:35

标签: filter filtering sanitize input-sanitization

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

3 个答案:

答案 0 :(得分:2)

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

以下是一些基本示例:

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

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

答案 1 :(得分:1)

简答:不。

答案很长:这取决于。

基本上,如果不考虑你想用它做什么,你不能说一定量的过滤是否足够。例如,上面将允许通过“javascript:dostuff();”,这可能没问题,或者如果您碰巧在链接的href属性中使用其中一个GET或POST值,则可能不会。

同样,您可能有一个富文本区域供用户编辑,因此从中删除标签并不完全有意义。

我想我想说的是,有一套简单的步骤来清理您的数据,以便您可以将其交叉并说“完成”。你总是要考虑数据在做什么。

答案 2 :(得分:1)

这在很大程度上取决于你将它用于何处。

  • 如果要将内容显示为HTML,请确保正确指定编码(例如:UTF-8)。只要您删除所有标记, 就可以了。
  • 在SQL查询中使用,addslashes是不够的!例如,如果您使用mysqli库,则需要查看mysql::real_escape_string。对于其他DB库,请使用指定的转义函数!
  • 如果您要在javascript中使用该字符串,则addslashes 不会就足够了。
  • 如果您对浏览器错误感到偏执,请查看OWASP Reform library
  • 如果您在HTML之外的其他上下文中使用数据,则适用其他转义技术。