Exin
V2EX  ›  问与答

PHP 接收参数时需要检测吗?

  •  
  •   Exin · Apr 29, 2016 · 2886 views
    This topic created in 3841 days ago, the information mentioned may be changed or developed.
    比如

    $val = $_GET[$key];
    func ($val); // 使用$val 的函数

    如果不事先 $paraSet = isset($_GET) && isset($_GET[$key]);
    那么可能返回状态码 500(?) ,但是程序会立即终止。

    这样在没有收到参数时通过异常自动结束程序,有没有什么危害?
    16 replies  •  2016-04-30 07:38:28 +08:00
    b821025551b
    b821025551b
    Apr 29, 2016
    1
    关键词: sql 注入, xss
    shiny
    shiny
    PRO
    Apr 29, 2016
    2
    可以考虑 filter_input 或者框架集成
    chend
    chend
    Apr 29, 2016
    3
    对于 整形 我直接 intval()
    对于字符串 直接 htmlspecialchar()

    也不知道 有没有隐患。。。
    Exin
    Exin
    OP
    Apr 29, 2016
    4
    @b821025551b 不是这个问题。
    我的问题是"检测变量是否被传入"而不是验证"已传入变量的安全性"。
    b821025551b
    b821025551b
    Apr 29, 2016
    5
    @Exin 个人感觉:安全性(数据库)方面应该没什么影响,但是基于书本上说的,“安全性是系统设计、实现和管理的一部分,其作用是保证系统可以完全按照人们想要的方式运行”,那么不监测是否传入空值,从而产生异常程序死掉,这个程序就是“不安全”的。至于危害,
    站在测试人员角度:空值导致程序非正常运行, bug ,滚回去改;
    站在运维人员角度:满屏的 500 ,这么多 bug 滚回去改;
    站在用户角度:什么**网站, f ** k ,又**死了。
    那么你就第 N + 1 遍改代码喽。
    Exin
    Exin
    OP
    Apr 29, 2016
    6
    @b821025551b 谢谢。
    zrp1994
    zrp1994
    Apr 29, 2016
    7
    xmbaozi
    xmbaozi
    Apr 29, 2016
    8
    isset($_GET) 必定是 true 啊
    Exin
    Exin
    OP
    Apr 29, 2016
    9
    @xmbaozi 噢,对的。。手抖了
    xmbaozi
    xmbaozi
    Apr 29, 2016 via Android
    10
    如果没有参数就是数组的键不存在,会有一个 notice ,不是致命错误,所以不会 500
    iyaozhen
    iyaozhen
    Apr 29, 2016 via Android
    11
    还是要检测的,自己封装一个方法吧,不存在的时候给个默认值。
    zjqzxc
    zjqzxc
    Apr 29, 2016
    12
    $val = isset($_GET['key']) ? $_GET['key']:0;
    如果不存在就给个默认值进去
    Exin
    Exin
    OP
    Apr 29, 2016
    13
    @xmbaozi 的确不是直接 500 。一般是在 func($val)里面异常导致 500 。
    mahone3297
    mahone3297
    Apr 29, 2016
    14
    这跟 php 没什么关系吧,其他语言,你也要判断吧。。。
    Exin
    Exin
    OP
    Apr 29, 2016
    15
    @mahone3297 限定一下范围有助于话题展开。
    msg7086
    msg7086
    Apr 30, 2016
    16
    @mahone3297 ruby 可以用 guard operator ,不用这么麻烦。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3389 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 10:34 · PVG 18:34 · LAX 02:34 · JFK 05:34
    ♥ Do have faith in what you're doing.