2016-07-23 40 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注入無法修改後的