SQLインジェクション基礎的認識と対策

ホームページを制作する際には最早、 抜きにして考えられないのは制作サイトに内在する脆弱性の検討、考慮です。 インターネットに於ける独特の危険性を考えないで作られたホームページほど、 危ないものは無いのかも知れません。 脆弱性が攻撃者に露見するに、 Webサイトが改竄されるにしても、個人情報が流出するにしても、 大きな悪影響を運営組織に与えざるを得ないからです。 此の脆弱性を攻撃するひとつに当アーティクルタイトル SQLインジェクション があります。 此れはデータベースを操作する言語 SQL を利用した攻撃にて、 ブログを始め、今やデータベースと関連しないホームページのコンテンツは考えにくい状況となれば、 ホームページ運営者はよくよく鑑みて製作業者に指示を出す必要があるかと考えます。

此の攻撃を認識するに適したが、 @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
     WHERE uid=´ueno´ AND pwd=´´ OR ´A´=´A´
が如くSQLが構成されることになり、
これが実行されるとORの後は常に真なので、パスワードが異なるにもかかわらず認証されてしまうという現象が起きてしまう。
なる事態を招いてしまい、 後は攻撃者のなすが儘とは実にも恐ろしきこと。

扠、当基本事項に限ってを述べるが管見の対策は
  • php.iniのmagic_quotes_gpcの設定
  • データベースの抽出結果は其の該当数を利用する
  • データベースから抽出した全ID、パスワード配列と該当要素を照合する
上記に三つ挙げる一番目では、 当世phpはインストールすればphp.iniにonと設定さるを、 試しに身近な環境で実際にテストするには、 .htaccessファイルに php_flag magic_quotes_gpc off なるディレクティブを書き加えセキュリティレベルを落とす必要がある配慮がなされておりはすれども、 上野氏記事には見透かされた如く
フォームから渡された値の特殊文字をエスケープしたり、PHPのmagic_quotes_gpcといった自動エスケープ機能をオンにするだけで対策したつもりになっていないだろうか。
と言及されるに此れのみにては面白く無く、 二番目抔は $rows=mysql_num_rows($result); 抔とした抽出結果のカウント数が1以外の場合は弾く方式にて、 まずまず我乍面白き対応だとは思いますが、 三番目抔は登録ユーザーが増えれば使い物にならなくなる手法にて申し訳無き提案にて失礼。

上野氏記事には以外、
  • セカンドオーダーSQLインジェクション
  • シングルクオーテーションを使わないSQLインジェクション
  • マルチバイト文字の問題
抔の手法の挙げられ、当アーティクル提案の手法にて賄えるも在るかに存じますが、 此れは又上野氏記事に挙げられる対策が内、 Webアプリケーションの対策 のほんの一部、 他にもWAFやIDS抔、 Webアプリケーション周りの対策 及び データベースの対策 も紹介されれば、自運営サイトの脆弱性の気に掛る方は参照され度思います。
スポンサーリンク