Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2013年12月17日
最終更新日:2015年3月27日

Like 句に対する SQL インジェクション対策(PHP編)

概要

SQL インジェクションは、プレースホルダを利用することで対策が可能ですが、Like 句のワイルドカードついては、ほとんどの情報元が「別途エスケープが必要です」としか記載されていません。

この記事では、MySQL に対するワイルドカードのエスケープ方法の、PHP + PDO + MySQL と PHP + MDB2 + MySQL の2種類の実装を例示します。

PHP の 5.4系、5.5系は今後 PDO の採用を推奨します。5.3系では、状況に合わせて適切な方を選択してください。

PDO と MDB2 の詳細については、以下の記事を参照してください。

サンプルアプリケーションの概要は、以下の通りです。

search

MySQL のワイルドカードのエスケープ

MySQL のワイルドカードは、以下の 2 つになります。

% 0個以上の文字
_ 1文字

MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.3.1 文字列比較関数

MySQL では、以下の SQL 文のように ESCAPE 句がない場合は、「\」がエスケープ文字と仮定されます。しかし、SQL の規格(ISO および JIS)では ESCAPE 句がない場合はエスケープ文字が定義されないので、ESCAPE 句は必ず書くことを推奨します(「体系的に学ぶ 安全なWebアプリケーションの作り方」より)。

PDO 版

・input.php

・search.php

・result.php

MDB2 版

・input.php

・search.php

・result.php


スポンサーリンク




カテゴリー:Webアプリケーションセキュリティ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA