2016-07-23 8 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インジェクションがクエリを変更する方法はありません。

関連する問題