怪談: SQLインジェクションの恐怖
2008年11月17日(月曜日)
怪談: SQLインジェクションの恐怖
更新: 2008年11月19日20時10分頃
神戸デジタル・ラボの「セルフチェックかんたん5」は試すな危険 (d.hatena.ne.jp)。
ところが、同じチェックシートの『チェック3「内部データをのぞき見されているかもしれない」チェック』は、益は少しあるかもしれないが、それ以上に予期しないトラブル、具体的にはデータベースの破壊を招きかねないという点で、けっして「かんたん」というものではない。
(~中略~)
SQLインジェクションの検査は、専門家がやっても時としてデータベースを破壊しかねないものであるので、診断に先立って必ず免責事項を取り交わす。そのような危険を伴う診断行為を一般ユーザに試させるのであれば、まずは安全第一の検査パターンを紹介した上で、診断に伴う危険性を十分に告知することが検査会社としての責務であると考える。
これ、個人的に恐怖体験があります。
「JVN#92832583 Advance-Flow におけるクロスサイトスクリプティングの脆弱性 (jvn.jp)」というのがありますが、私がこれを発見したとき、同時にSQLインジェクションを思わせるエラーメッセージが出ることも発見していました。で、社内で報告してテスト環境で検証したりとかいろいろしていたのですが、テスト環境のデータが全滅……。DELETE文を発行するようなことは一切していないはずですし、何故消えたのかよく分かりませんでしたが、ともあれテストパターンのいずれかで全滅したのは間違いないものと思います。内部で複雑なSQL文を発行していると、予想外のことが起きたりするようです。
で、怖いのはここからです。なんとその翌日、「データが全部消えました!」というメールが……。テスト環境でしか試していないはずだったのに、何故か本番環境のデータまで一緒に消えたというミステリ。
さらに、SQLインジェクションとして届け出たら、
製品開発者は SQL 文自身は実行されず、入力値によってエラーが発生する現象であり、SQL インジェクションとは呼べないと判断されました。
という連絡が来まして、そもそもSQLインジェクションは存在しなかったということに。
では、私が見たものはいったい何だったのか?
……とても怖い心霊現象ですね。稲川淳二とも渡り合える怖さです。
※まあ、本番環境が消えてしまったのはたぶん何かの手違いだろうと思いますが、「SQLインジェクションはなかった」というのはホントに怖い話です。
ともあれ、それ以来、個人的には「単引用符の後ろに文字列を入れない」ということを心がけるようにしております。
※2008-11-19追記: 念のため補足。「単引用符の後ろに文字列を入れない」というのは検査時の注意で、実装の話ではありませんので念のため。私は Advance-Flow の一ユーザに過ぎず、実装とは無関係です。
- 「怪談: SQLインジェクションの恐怖」へのコメント (1件)