SQLインジェクションって
テーマ:ソフトウェアSQLインジェクションって言葉ご存知ですか?
WEBアプリ開発者なら常識なのかもしれません。
恥ずかしながら私は先ほど初めてこの言葉を知りました。
ネットで調べ物をしてたときに引っかかりました。
どういうことかというと、ログイン画面のチェックロジックが以下のようなSQLになっていた場合、
SELECT * FROM user WHERE userid='" & userId & "' AND password='" & password & "'"
ユーザ名、パスワード欄に「' OR 'A'='A」と入力すると、実行されるSQL文は、
SELECT * FROM user WHERE userid='' OR 'A'='A' AND password='' OR 'A'='A'となります。
このSQL文だと、WHERE句に指定した条件が変わってしまい、ログイン可能となってしまいます。
さらに、ユーザIDが分かっていれば、普通のログインとなんら変わらない状態でシステムが利用可能状態となりますので、ログインチェックの意味がなくなります。
こういったSQLの差込をすることをSQLインジェクションというらしいです。
実装によっては、DELETE文やUPDATE文も差し込める可能性があります。
何でも以前のカカクコムの情報流出事件は、この方法が使われたとか?
SQLインジェクションができるってのは、明らかにシステムのバグで、原因がはっきりすれば、作った側にも責任が生じるんじゃないかと思います。
私は、今まで外部に公開しない、社内専用の業務システム開発がほとんどでしたので、あまり気にしたことが無く、ログインロジックは実装するものの、実運用ではユーザが1種類しかなかったり、パスワードを設定していなかったり、ユーザ名とパスワードが同じだったりと、作る側も、使う側もセキュリティをあまり意識していなかったので、多分今まで作ったシステムの中にもこの手法が使えてしまうものがあるような気がします。
SQL文を入力欄に書くなんてテストはやっていませんし。
ちょっと気になって、今作っているシステムのログイン画面で、
同じように入力してみたところ・・・ログインできてしまいました!!
まぁ、今作っているシステムは、ログイン画面どうこう以前に、URL直書きすれば好きな画面を直接開けてしまったり、重要な引数をQueryStringで渡していて丸見えなので、セキュリティなんて無いに等しいのですが。
もっと真剣に考えていかなければいけません。
まだまだ勉強不足です。









