キケンなSQLインジェクション
- 2008/06/26(木) 14:00:00
更新情報
yappoさん、nipotanさん、麻理さんを追加しました!ありがとうございます!!
日本のGeeksがマジ優しすぎて鼻から牛乳><
geek DataBase - ギークデータベース
SQLインジェクション攻撃による不正なデータベース操作を防ぐ
前回の更新後、さっそく秘密コメントやTwitter等で脆弱性を指摘されました><
zapaさん、kidd-number5さん、ほかアドバイスくださったすべての方へ!
とても勉強になりました!ありがとう、ありガ島通信!!!
geekDataBaseに、かの有名なSQLインジェクションの脆弱性がある、という衝撃の事実が判明。
うわさには聞いていたが、まさか自分の身に降りかかるとはっ・・・。
参考:サイト脆弱性をチェックしよう!--第6回:SQLインジェクションの検査方法
// id=数字以外はエラーメッセージを表示 という部分。
これを追加してすっかり満足してたけど、どうやら入れるタイミングがまずいらしい。
7 $sql="select * from geekDB where id = " . $id;
8 $result = mysql_query($sql);
というクエリ実行後に「そういえばidは数字以外じゃダメだからね!」と言っても遅い。
もし、悪いやつが「";DELETE FROM geekDB;」なんて入力したら、なんとデータが消えてしまうΣ(゚Д゚)
あぶねぇぇぇえええ!あな、おそろしや・・・おそろしや・・・。
紅が無知なだけというせいもあるけど、世の中には、思いもよらぬ行動を取る人がいるんだなぁと痛感。
だって!URL欄にクエリ打ち込むて!!うちの母親なんてアドレスバー非表示にしてるつうの!!
話がそれた。まとめよう。今回覚えたこと。
「$idは数字以外は受け付けない」というのは、クエリ実行後ではなく、
一番最初に言わなければいけない。
それでは、追加したコードを移動。
3 mysql_connect('localhost','ユーザ名','パスワード');
4 mysql_select_db('データベース名');
5 mysql_query("set names utf-8");
6
7 //id=数字以外はエラーメッセージを表示
8 if(!is_numeric($id)){
9 echo "該当データがありません";
10 }
11 else{
12 //ここまで
13
14 $sql="select * from geekDB where id = " . $id;
15 $result = mysql_query($sql);
16
17 while ($item = mysql_fetch_array($result)) {
18 ・・・(以下略)
これでOK、今度こそOK。
テーブルは消えないわ、私が守るもの!
この記事に対するトラックバック
この記事のトラックバックURL
それはそれで・・・
キケンなSQLインジェクション うちの母親なんてアドレスバー非表示にしてるつうの!! それはそれでフィッシング詐欺に関する問題にハマるのでは・・・ 簡単!やさしいセキュリティ教室
- From: ito.tetsunosuke/notebook |
- 2008/06/27(金) 11:29:32
この記事にコメントする
- HOME |




この記事に対するコメント
秘密のコメント
ブログ管理人への秘密コメントです
プレースホルダを使用した方が安全では?
文字列検索をさせたいときに困りますよ