SQLインジェクションとは、本来SQLの入力を想定しないパラメータにSQLを埋め込むことで、システムの設計者が意図しない挙動をDBにさせること。
以下、そのもっともシンプルなサンプルです。
いつものことですが、本記事はセキュリティ意識の向上を目的とします。悪用しないでください。
>
上図のように、IDとパスワードを入力するフォームがあるとします。
てきとうにIDとパスワードを入力します。
>
当然、IDとパスワードの組み合わせがDBに登録されていなければ、認証エラーになります。
>
次は、パスワード欄に「password" OR "A" = "A」と入力してみます。
>
実行されるSQL文は
「SELECT * FROM user WHERE uid = "john" AND pwd = "password" OR "A" = "A"」
となり、テーブル内の全結果が取得されます。
今回の試行では、下記「参考」で挙げているセカンドオーダーSQLインジェクションは成功しませんでした。(エスケープごとDBに入れると、取り出したときもエスケープごと出てくる?)
【勉強会参加者専用 参考URL】 http://pptxshare.sourceforge.jp/trysql/login/
【参考】
セカンドオーダーSQLインジェクション
http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html