不要再使用 $_GET 了July 14, 2010

看见 PHP Arch 上重新提及 Fliter 模块,的确这个模块能节省我们不少的时间,这里再次整理下。

$_GET 和 $_POST 等用户提供的数据如果使用不当,如验证、过滤不全面,就很容易造成安全问题。通常情况下,我们会编写“一坨”正则来验证数据格式是否合法。

现在,有另外种方法让这过程变得更加的可靠和高效。

在 PHP5.2 中,内置了Filter 模块,用于变量的验证和过滤。

过滤变量等操作可以参看我原先提及的,这里我们看下如何直接过滤用户输入的内容。

Fliter 模块对应的 filter_input 函数使用起来非常的简单,例如我们过滤用户输入名为 sample 的 GET 参数为整型,那么可以这样写

filter_input(INPUT_GET, "sample", FILTER_SANITIZE_NUMBER_INT);

filter_input 的参数分别是用户输入类型、对应的输入名称、以及过滤(验证)常量。目前 filter_input 支持下面几种用户输入

INPUT_GET     // 对应 $_GET
INPUT_POST    // 对应 $_POST
INPUT_COOKIE  // 对应 $_COOKIE
INPUT_SERVER  // 对应 $_SERVER
INPUT_ENV     // 对应 $_ENV

配合内置提供的各种验证标记符,就可以解决类似的用户输入过滤等“体力活”。

最后,还是需要再提下 Filter 的个不大不小的陷阱

filter_var('abc', FILTER_VALIDATE_BOOLEAN); // bool(false)
filter_var('0',   FILTER_VALIDATE_BOOLEAN); // bool(false)

总体而言,这并不影响我们去尝试它 :^)

-- EOF --

已有 12 条评论

  1. Amaranth Amaranth

    造了好几年轮子了..Orz...

  2. joyqi joyqi

    参数太多了,懒得记,自己封装下好了

  3. dvaknheo dvaknheo

    为什么 filter 不受欢迎,看看下面就知道了 。

    filter_input(INPUT_GET, "sample", FILTER_SANITIZE_NUMBER_INT);

    比 java 还长

    @(int)$_GET['sample'];

    要不就自己弄一个吧
    my_get("sample",0,'int');
    这短多了

  4. anonymous anonymous

    我一个 g_int('sample'); 就搞定了。

  5. 我还不知道filter_input的参数可以写得那么简单哦~!

  6. van van

    这个参数也太。。。。。

  7. 测试下新皮肤的功能是否正常

  8. 字体可以再搞下。
    在win下用firefox看着有一点怪怪的。

  9. evan evan

    kissy 的皮肤捏?小明子要自觉啊

  10. @evan kissy 的皮肤已经托人在处理,少安毋躁呀…

  11. [...]96.【PHP】$_GET 和 $_POST 等用户提供的数据如果使用不当,如验证、过滤不全面,就很容易造成安全问题。通常情况下,我们会编写“一坨”正则来验证数据格式是否合法。详情请参阅:http://www.gracecode.com/archives/3029/ (明城)[...]

  12. [...]文章来源[...]

添加新评论




* Required (but your email address will never be published)

Yahoo 统计