SQLインジェクションのプレースホルダによる対策(SELECTについて)

SELECT * FROM user_info WHERE name = '$username' AND password = '$userpass';

のように入力を受け付けたときに、

SELECT * FROM user_info WHERE name = 'user1' AND password = '' OR 'A' = 'A';

のようなSQL文を生成し、不正なログインなどをするSQLインジェクションに対し、このケースの場合

$sql = "SELECT * FROM user_info WHERE name= :username AND password= :pass";
$stmt = $dbh->prepare($sql);
        $stmt->bindValue(':username',$username,PDO::PARAM_STR);
        $stmt->bindValue(':pass',$password,PDO::PARAM_STR);
        $stmt->execute();

とプレースホルダを用いて対策できる。bindValue()の返り値がboolなのに最初混乱した。注意が必要。

ハックノートをフォローして
最新情報をチェックしよう

AWS構築サービスの全てをまとめた資料を公開中

ハックノート(TOWN株式会社)では、AWSの導入や構築支援を行っています。AWS導入メニューやサービス詳細、構成例や費用を掲載した資料をダウンロードできます。

AWSの新規導入やAWSへの移行を検討の際は、ぜひご参考ください。


APNコンサルティングパートナー

TOWN株式会社はAmazon公認コンサルティングパートナーです。