2016-07-23 100 views
-2

以下代码源是否可以从SQL注入安全?如果没有,请提供一种方法使其更安全?此代码源是否会从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>'; 
    } 

?> 
+0

我完全改变了这个问题,因为最后一个是无效的。 – Austin

+0

我会说“是的”.. – zerkms

回答

0

这里有一个简单的方法来告诉我们,如果这是安全的从SQL注入漏洞:

查询字符串与它连接起来没有PHP变量:

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

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

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