【问题标题】:Why is better to use filter_input()?为什么使用 filter_input() 更好?
【发布时间】:2010-10-20 14:04:22
【问题描述】:

这应该是一个基本问题,但为什么使用这样的东西更好:

$pwd = filter_input(INPUT_POST, 'pwd');

不仅仅是:

$pwd = $_POST['pwd'];

PS:我知道过滤器扩展可以与更多参数一起使用,以提供额外的清理级别。

【问题讨论】:

  • 该问题的票数多于接受的答案。有趣...

标签: php security filter


【解决方案1】:

从客户端发送的任何数据(例如 POST 数据)都应该经过净化和转义(甚至更好的是经过完整性检查),以确保它不会破坏您的网站。

SQL InjectionCross-site scripting 是未能清理用户发送数据的两个最大威胁。

【讨论】:

  • 如果在打印任何用户提供的数据之前使用参数化查询和 htmlspecialchars(),是否仍然需要 filter_input()?
  • filter_input(INPUT_POST, 'pwd'); (没有任何其他参数仍然可以清理值?
  • @Ben:通常你是对的,但这不是这个问题的答案。
【解决方案2】:

不是。 $_GET$_POST$_COOKIE$_REQUESTfiltered with default filterfilter_input(INPUT_POST, 'pwd') 没有附加参数也使用默认过滤器。所以根本没有区别。

【讨论】:

  • 正在寻找 filter_inputhtmlspecialchars 并注意到这似乎已经过时了。大多数 PHP 配置不再过滤此数据,您发布的链接甚至将默认配置值设置为“unsafe_raw”
  • @Charles:在这两种情况下,数据都会通过默认过滤器。该默认值现在恰好是 "unsafe_raw",但这并没有改变这样一个事实,即使用 filter_input 而不使用 filter 参数不会为您提供任何额外的安全级别。
  • 很公平。感谢您的信息。
  • 在我的服务器上,打开 magic_quotes_gpc 时会有所不同。过滤后的不包括斜线,而用 $_POST 引用它。到目前为止,我不知道为什么,...stackoverflow.com/questions/9533122/…
【解决方案3】:

这不是更好。

请参阅有关 filter_input 的文档 http://www.php.net//manual/en/function.filter-input.php

并单击“过滤器类型”链接。 http://www.php.net/manual/en/filter.filters.php

我只用过整数过滤器...

$user_id = filter_input(INPUT_POST, 'user_id', FILTER_SANITIZE_NUMBER_INT);
$user = abs($user_id); // To get rid of any +/-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多