Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这段代码在PDO中sql注入安全吗?_Php_Pdo_Sql Injection - Fatal编程技术网

Php 这段代码在PDO中sql注入安全吗?

Php 这段代码在PDO中sql注入安全吗?,php,pdo,sql-injection,Php,Pdo,Sql Injection,代码新手: if(isset($_POST['selection'])) { include_once 'pdo_init.php'; $params_str = str_repeat('?,',count($_POST['selection'])); $params_str = substr($params_str,0,-1); $res = $pdo->pre

代码新手:

        if(isset($_POST['selection']))
        {
            include_once 'pdo_init.php';
            $params_str = str_repeat('?,',count($_POST['selection']));
            $params_str = substr($params_str,0,-1);
            $res = $pdo->prepare('DELETE FROM funcionario WHERE codigo in ('.$params_str.')');
            if($res->execute($_POST['selection']))
            {
                return json_encode(array(
                    'success' => 1,
                    'msg'     => 'os registros foram deletados com sucesso!'
                ));
            } else {
                return json_encode(array(
                    'success' => 0,
                    'msg'     => 'nao admitimos sql-injection aqui seu safado!'
                ));
            }
        } else {
            # error out
            break;
        }

看起来您正在动态地进行参数化查询

参数化查询是注入安全的


但请记住,也要注意注入安全,只要用户可以删除表中的所有行,因为如果她愿意,她可以发送包含表中所有codigo的帖子


无法欺骗您的查询,使其与其他表相接触。

您使用的是正确的吗?准备。请注意,PDO不会保护您免受的一种情况是动态表/列名。PDO和mysql_real_escape_string不会使用反勾号,`,所以请尽量不要使用动态表或列名。

学究地说,不,通常从准备好的语句中获得的安全性不是100%。这是因为在MySQL中,PDO是内部的。这意味着数据是转义的,所以在PDO中至少使用默认设置时,使用准备好的语句比转义没有任何好处

您可以通过在连接上设置PDO::setAttributePDO::ATTR_EMULATE_PREPARES,0来更改此设置

MySQLi确实使用了真正准备好的语句,所以我建议改用它