Webセキュリティ vol.1 <SQLインジェクション>

SQLインジェクションについて学びました。
セキュリティに関しては手を抜けないところですが、
フレームワークを使う理由の一つにSQLインジェクション対策があることを聞いて
ますますフレームワークの便利さが分かりました。

SQLインジェクションとは?

よくある例
$sql = 'SELECT name FROM user WHERE id='.$_GET['id'];
  • 想定外のSQLを実行される脆弱性
  • DBの全情報を盗む方法論が確立している
  • 更新系のSQLを流される可能性
SQL文のコメント
--こめんと
UNION文
  • 前後のSELECT文の結果を連結
  • 1文目と2文目でカラム数・型が合っている必要がある

防ぐ

防御方法
  • O/Rマッパー
    • メリット
      • 誰でも安全なSQL文が作れる
    • デメリット
      • 適応範囲が限られる

→O/Rマッパーで書ける範囲なら完璧

  • prepared statement
    • メリット
      • 複雑なSQLでも記述可能
      • ?が使える場所は安全
    • デメリット
      • ?は文字列にしか使えない(使えない場所は用心)
使い分け
  • 基本はO/Rマッパー
  • 複雑なSQLは用心しながらprepared statement
    • ?が使えない場所は要レビュー