V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

把 PDO::quote 的结果去掉两边的单引号,其结果和 mysqli_real_escape_string 等效么,安全么?

  •  
  •   gouchaoer · 10 天前 · 470 次点击
    PDO::quote 的字符串有个麻烦就是两边带上了单引号,现在我在处理一些历史遗留代码,所以直接写了个函数类似这样:
    function escape($str)
    {
    global $pdo;
    return substr($pdo->quote($str), 1, -1);
    }

    然后实际这样用:
    $id=$_GET['id'];
    $id=escape($id);
    $sql="SELECT * FROM t WHERE id={$id}";
    ...

    这样安全么?
    第 1 条附言  ·  10 天前
    写错了,是这样的:$sql="SELECT * FROM t WHERE id='{$id}'";
    7 回复  |  直到 2017-10-13 14:35:20 +08:00
        1
    gouchaoer   10 天前
    mysqli_real_escape_string 就不带两边的单引号,不过这里用的是 PDO
        2
    WuwuGin   10 天前 via Android
    pdo queto 就是添加单引号和处理转义特殊字符的,单引号里面的内容不会被 PHP 执行。你这样去掉等于没有使用此函数。
    如果想避免注入,使用 prepare 函数,在需要执行用户输入的参数的时间,使用 bindParam 或者 bindValue。
        3
    2ME   10 天前
    prepare 预处理 bind 绑定设置参数 PDO::PARAM_INT
        4
    gouchaoer   10 天前
    @WuwuGin 写错了,是这样的:$sql="SELECT * FROM t WHERE id='{$id}'";
        5
    gouchaoer   10 天前
    我知道 bind 好,但是历史代码是那样的,你 bind 要改很多逻辑,我没办法保证不出问题,还是对输入消毒改动小
        7
    WuwuGin   10 天前 via Android
    @gouchaoer 其实我觉得你这样是符合 queto 函数的最终目的的。但是防注入不光靠 queto 啊。
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2353 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 55ms · UTC 07:59 · PVG 15:59 · LAX 00:59 · JFK 03:59
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1