WAS Forum Developer Dayに行ってきました #2
徳丸さんのSQLインジェクションのお話です。
淡々と面白い事言うのが個人的にツボでした。楽天の話は面白すぎです。
SQLインジェクション対策再考
詳しい内容は徳丸さんのブログを読むとよいと思います。http://www.tokumaru.org/d/
- HASHコンサルティング株式会社 徳丸さん
- 発表スライドが公開されました http://www.hash-c.co.jp/html/download.html
なぜ誤った解説がなくならないのか
- 攻撃方法からの発想
- 実はアプリケーションなんか書いたことない人が説明?
- サンプルコード動かしてみた?
- コピペの悪弊
なぜセミコロンを削除したがるのか
- 複文の防御
- インジェクションの文脈で複文が動くのはMS SQLとPostgreSQL
- MS SQLはセミコロン無しでも複文が書ける
そもそも、なぜSQLインジェクションが発生するか
エスケープは檻にしっかり入れるイメージ
- 檻に入っている分には中身の危険性を気にする必要はない
- インジェクションは檻から逃げるイメージ
MySQLとPostgreSQLで「\」のエスケープが必要な理由
- 「\'」で1文字と見なしてしまうから
文字コードの問題
- Shift_JISを避ける
- 言語レベルで文字コードを意識したものを
- PostgreSQL(8.1.4)
- サーバ側で無効なマルチバイト文字を拒否する
実際
入力値検証
まとめ・提言
- そろそろ「入力値の未検証」という表現はやめよう
- バインド機構の利用促進
- 正しいエスケープ方法の普及
- 安全なフレームワーク
- 安全なバインド機構はどれ?
- 安全なエスケープ関数はどれ?