fuelphpのSQLインジェクション対策とSQLインジェクションの機械的チェック
fuelphpのSQLインジェクション対策についていろいろ調べた。
http://d.hatena.ne.jp/Kenji_s/20111222/1324526139
Query Builderを使った場合はエスケープしてくれる。
DB::query()だけ注意。
DB::query()の場合もbindで値を渡す場合はエスケープしてくれる
\DB::query('select * from hoge where id=' . $id)->execute();
こういう書き方がアウト
そこで上記の書き方を検索する正規表現を作った。
/query\([^)]*?\$.*?\)/
query引数内に$があればヒットする。\$とかにもヒットするけど、SQL内で$は使わない・・・はず。
これをJenkinsさんとかにビルド毎にソースをgrepしていただいて、
見つかったらエラーにしてもらうと、とても便利な気がした。
あとドライバがmysqliだと複文が使えなくなっててなお良し。
※セキュリティチェックこそ自動化すべきだよね。デスマ中とかにセキュリティ意識したコードとか不可能。