- ベストアンサー
SQLインジェクションについて
デリケートな質問なのですが、お願いします。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1778333 上記のような項目も見たのですが、イマイチ理解出来ません。 現在3年目のPGです。 業務で必要なので調べている所なのですが、実例が無く (当然かもしれませんが・・・) イマイチしっくり来ません。 ○○.comで起こったと聞いています。 例えばログイン画面で ID:[abcd] PW:[1234] と仮定して。 きっとサーバ側で select * from USER_TABLE where ID=引数.ID and PW=引数.PW みたいな形で必要な物を取り出しているのかな? と思っています。 この引数にOR文が入るようにしたりして本来取り出せないはずの、 項目を取り出したりしているのでしょうか? どこまでが質問出来て、回答を貰えるのかが微妙ですが、 ご存知の方いらっしゃいましたらお願いします。 間違いもありましたら指摘して頂けると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
がると申します。 ものすごく簡単に状況を整理して見ます。 例えば、おっしゃっている ID:[abcd] PW:[1234] の場合(上述はいずれもFORMからの入力データ)。 SQLは select * from USER_TABLE where ID='abcd' and PW='1234' となるかと思います(上述のSQLが好ましいかどうかはまた別問題として)。 で、悪意ある攻撃者は、例えばこのように入力をします。 ID:[' or 1=1;'\0'] PW:[1234] ('\0'は、いわゆるナル文字) SQLを組み立ててみます。 select * from USER_TABLE where ID='' or 1=1;'\0' and PW='1234' 分かりやすいところで改行すると select * from USER_TABLE where ID='' or 1=1; '\0' and PW='1234' となります。で、実際にはIDのところに「ログインしたい任意のID」を併記すれば、そのIDのパスワードを知らなくても簡単にログインができます。 と、これは「ログインを横取りしている」ケースで。無論十二分に困るのですが。 これが、INSERT、UPDATEで似たようなことをされると、より一層の問題が発生します。 (まぁ「不正に閲覧される」と「改竄される」のどちらがより深刻なのかは難しいところですが) こんな感じで説明になりますでしょうか?
その他の回答 (2)
こちらでどうでしょうか。 http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.html 言語がPHPならココで… http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html
お礼
お礼が遅くなってしまい申し訳ありません。 ご回答ありがとうございます。 1番目のサイトが解りやすかったです。 ご回答ありがとうございました。
- ymmasayan
- ベストアンサー率30% (2593/8599)
ページ数は多いですが、↓に詳しくわかりやすく説明されています。 お気に入りに入れておいて損はありません。 必要な所だけ拾い読みして下さい。 私は全部(数100ページ)印刷して読みました。 何しろ情報セキュリティの総元締めのIPAが出しているだけのことはあります。
お礼
お礼が遅くなってしまい申し訳ありません。 ご回答ありがとうございます。 これはかなり役に立ちますね、 実装レベルで記述されているのが助かります。 ありがとうございました。
お礼
お礼が遅くなってしまい申し訳ありません。 ご回答ありがとうございます。 >実際にはIDのところに「ログインしたい任意のID」を併記すれば、そのIDのパスワードを知らなくても簡単にログインができます。 なるほど!理解できます。 そういう事も含めて、期待しない値が入ってきた際にはハネるようにしなくてはいけないわけですね。 >こんな感じで説明になりますでしょうか? 解りやすい回答ありがとうございました。