【问题标题】:filtering user input in php在php中过滤用户输入
【发布时间】:2009-12-09 11:39:50
【问题描述】:

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

【问题讨论】:

  • 这取决于您对 GET 和 POST 值的处理方式。

标签: filter filtering sanitize sanitization


【解决方案1】:

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

以下是一些基本示例:

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

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

【讨论】:

    【解决方案2】:

    简短回答:不。

    长答案:视情况而定。

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

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

    我想我想说的是,有一组简单的步骤可以清理您的数据,这样您就可以将其划掉并说“完成”。您必须始终考虑这些数据在做什么。

    【讨论】:

      【解决方案3】:

      这在很大程度上取决于您将其用于何处。

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

      【讨论】:

        猜你喜欢
        • 2010-11-05
        • 2013-01-14
        • 2011-08-23
        • 2011-01-21
        • 2011-08-30
        • 1970-01-01
        • 2013-04-16
        • 2011-05-18
        相关资源
        最近更新 更多