PHP逆引き大全 516の極意

セキュアプログラミングの極意 - Tips453 SQLインジェクション対策をする

登録タグ
PHP
Icon comment count 0
Icon stock count 0

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()メソッドでパラメータに値を割り付けることをバインドと呼び、このような仕組

出典情報

Medium

PHP逆引き大全 516の極意

  • 著者: 大家 正登, 茂木 健一, 鮫島 康浩, 谷中 志織

コメント

    コメントはありません