此の攻撃を認識するに適したが、 @ITには2008年6月27日に株式会社ユービーセキュア杉山俊春氏に依るコラム もいちどイチから!HTTP基礎訓練中 の第6回 SQLインジェクション攻撃、ターゲットは“あなた”です が掲載され、当攻撃に限らず漫画を交えて分かり易く、危険性を説明してくれています。
更に当攻撃の詳細を知るには、 同じく@ITは上野宣氏に依るコラム セキュリティ動向チェック の第42回は2006年11月2日の記事 今夜分かるSQLインジェクション対策 が掲載され、其の日付からもドッグイヤーの此の世界では古典的な印象され抱かれますが、 実は今以て効果を失わぬ、強力な手法でもあり、 ホームページ運営のご仁は考慮しておく必要があるかと考えます。
スポンサーリンク
SELECT ∗ FROM user WHERE uid=´$uid´ AND pwd=´$pwd´なる実装にて
$uid:uenoと攻撃者に入力されれば忽ち
$pwd:´ OR ´A´=´A
SELECT ∗ FROM userが如くSQLが構成されることになり、
WHERE uid=´ueno´ AND pwd=´´ OR ´A´=´A´
これが実行されるとORの後は常に真なので、パスワードが異なるにもかかわらず認証されてしまうという現象が起きてしまう。なる事態を招いてしまい、 後は攻撃者のなすが儘とは実にも恐ろしきこと。
扠、当基本事項に限ってを述べるが管見の対策は
- php.iniのmagic_quotes_gpcの設定
- データベースの抽出結果は其の該当数を利用する
- データベースから抽出した全ID、パスワード配列と該当要素を照合する
フォームから渡された値の特殊文字をエスケープしたり、PHPのmagic_quotes_gpcといった自動エスケープ機能をオンにするだけで対策したつもりになっていないだろうか。と言及されるに此れのみにては面白く無く、 二番目抔は $rows=mysql_num_rows($result); 抔とした抽出結果のカウント数が1以外の場合は弾く方式にて、 まずまず我乍面白き対応だとは思いますが、 三番目抔は登録ユーザーが増えれば使い物にならなくなる手法にて申し訳無き提案にて失礼。
上野氏記事には以外、
- セカンドオーダーSQLインジェクション
- シングルクオーテーションを使わないSQLインジェクション
- マルチバイト文字の問題