SQLインジェクション
・SQLインジェクションとは
アプリケーションに渡すパラメータの値を操作することで、想定していないSQL文を実行させ、データベースシステムを不正に操作する攻撃方法のこと。
具体的な被害には以下のようなものがある。
個人情報などの重要情報の漏洩、不正なログイン、データベースの改ざん、OSコマンドの実行、サーバーの乗っ取り、etc..
・SQLインジェクション対策
SQLインジェクション対策には、SQL生成の際にプレースホルダを利用する。
プレースホルダとは、SQL文の中で可変な項目を後から変更可能なパラメーターとして処理する方法。
プレースホルダには、ライブラリでプレースホルダを実現する「動的プレースホルダ」と、データベース側でプレースホルダを実現する「静的プレースホルダ」がある。
脆弱性を完全に排除できるという点で静的プレースホルダの採用が望ましい。
PHPではPDOを使うことで簡単にプレースホルダが使える。 PDOとは「PHP Data Objects」の略で、PHP標準(5.1.0以降)のデータベース接続クラスのこと。
例
$spl = “SELECT * FROM user_info WHERE name=’$username’ AND password=’$password'”;
$stmt = $dbh->prepare($sql);
$stmt->execute();
次のように変更する