7-4安全なデータベース処理Tips453 SQLインジェクション対策をする
Level2
Pointデータベース処理にバインド機構を用いる
これまでの脆弱なコードの例では、外部からの入力値をPHPの文字列操作でSQLに組み入れていたため、SQLの構文自体が組み換えられ、不正なSQLが実行されていました。
外部からの入力値を全て正しくエスケープし、SQLの構文に影響を及ぼさない文字列にすることで対処は可能ですが、対応漏れも出やすく、根本的な対処とは言い難い部分があります。
SQLの組み立てをバインド機構を用いて行うことが、原理的に最も有力な対処方法といえます。PDO利用時を例に取ると、下記のような手順でSQLを実行します。
$sql = "SELECT * FROM table WHERE パラメータ1 = ? and パラメータ2 = ? ";
$stmt = $pdo->prepare( $sql );
$stmt->bindValue('パラメータ1', パラメータ1の値, パラメータ1の種類);
$stmt->bindValue('パラメータ2', パラメータ2の値, パラメータ2の種類);
$stmt->execute();
PDOStatement::bindValue()メソッドでパラメータに値を割り付けることをバインドと呼び、このような仕組
この記事は会員限定です。会員登録をすると続きをお読みいただけます。
ログイン / 新規登録