这个代码源是否可以从SQL注入中“安全”?

时间:2016-07-23 01:55:05

标签: php mysql pdo sql-injection

以下代码源是否可以安全地进行SQL注入?如果没有,请您提供一种方法,使其更安全吗?

请注意:在发布此帖子时隐藏了数据库凭据以确保安全。

PHP版本:7.0

    <?php
    try{
        $handler = new PDO('mysql:host=localhost;dbname=hidden', 'hidden', 'hidden');
        //**$handler->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
        echo $e->getMessage();
    }

    $myID = 8869935;
    $query = $handler->prepare('SELECT * FROM Calls WHERE UserID=:cid');
    $query->bindParam(':cid', $myID);
    $query->execute();

    while($row = $query->fetch()){
        echo $row['CallerID'], '<br>';
    }

?>

1 个答案:

答案 0 :(得分:0)

有一种简单的方法可以判断这是否可以防止SQL注入漏洞:

查询字符串没有与之连接的PHP变量:

$handler->prepare('SELECT * FROM Calls WHERE UserID=:cid');

这只是一个字符串,没有PHP变量或PHP常量。它是一个固定的字符串,在给予prepare()函数之前没有任何修改它。这足以保证它不受SQL注入的影响。

查询参数的绑定变量无法引入SQL注入。在绑定变量组合之前,查询由RDBMS 解析。在解析查询之后,SQL注入无法修改查询