水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > SQLのエラーで分かったり分からなかったり

SQLのエラーで分かったり分からなかったり

2009年2月27日(金曜日)

SQLのエラーで分かったり分からなかったり

公開: 2017年11月24日18時25分頃

続:SQLのバインド機構は「エスケープ処理された値」をはめ込むのか (d.hatena.ne.jp)」。

概ねよいのだが、『ブラウザ上には、処理が失敗したことが分かる程度の簡単なエラーメッセージを表示』という部分がよくない。処理が『失敗した』ことが分かれば、攻撃に対するヒントになり、ブラインドSQLインジェクションに利用される場合もあるだろう。処理が失敗したのか、入力値検証ではじいたのかを含めて、もっと大雑把なメッセージにしたほうがよい。

たとえば、普通に検索すると「見つかりません」になるのに、シングルクォートを含む検索では「メンテナンス中です」という表示になる、なんて検索システムがあったりしますね。何故かシングルクォートを偶数個連続して入れると「見つかりません」に、奇数個だと「メンテナンス中」になるという。こういう場合、SQLインジェクションが強く疑われます。が、「メンテナンス中」の場合であっても「見つかりません」と表示するようにしておけば、SQLインジェクションがバレにくいというわけですね。

※まあ、バレなきゃ良いという話ではないのですが。

もっとも、届出者の立場としては、大胆なエラーが出てくれた方がありがたかったりもします。基本的にSQLインジェクションは脆弱なのかどうか分からない、疑惑段階での届出になるのですが、希に脆弱性の存在をほぼ確信できる場合があります。それはたとえば、以下のような場合です。

たとえば、こんな感じのエラーですね。

Warning: db2_exec() [function.db2-exec]: Statement Execute Failed in /www/htdocs/sqlexecution.inc on line 11
SELECT goods_status FROM goods_table WHERE goods_id = test

こういう場合はかなりの自信を持って脆弱だと言えるので、ある意味、ありがたいと言えます。

※届出する人だけでなく、攻撃者にも情報与えすぎですが。恐ろしいことに、私はいずれのケースも複数見たことがあります。

ところで余談ですが、

日本には、47の都道府県があるのだから、説明なしに「01~48」とすると読者は面食らう。私の身の回りでは、48番目の県について「海外を示す」とか「いや、ぷりぷり県だ」とか、さまざまな憶測があったが、説明がないので本当のところは不明だ。

JISハンドブックでJIS X 0401の都道府県コードを確認しましたが、やはり01~47しか定義されていないですね。48番目は「あなたシナリオ」かもしれません……。

四八(仮) (www.amazon.co.jp)ネタ。

関連する話題: Web / セキュリティ / 情報セキュリティ早期警戒パートナーシップ

最近の日記

関わった本など

インクルーシブHTML+CSS & JavaScript 多様なユーザーニーズに応えるフロントエンドデザインパターンデザイニングWebアクセシビリティ - アクセシブルな設計やコンテンツ制作のアプローチコーディングWebアクセシビリティ - WAI-ARIAで実現するマルチデバイス環境のWebアプリケーション体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践ウェブの仕事力が上がる標準ガイドブック 5 WebプログラミングWeb Site Expert #13Dreamweaver プロフェッショナル・スタイル [CS3対応] (Style for professional)

その他サイト