SQLインジェクション対策

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();

次のように変更する

$sql = “SELECT * FROM user_info WHERE name=? AND password=?”;

$stmt = $dbh->prepare($sql);

 $stmt->execute(array($username, $password));