野鳥日記

野鳥と技術のブログ http://www.kiriya-system.com/

fuelphpのSQLインジェクション対策とSQLインジェクションの機械的チェック

fuelphpSQLインジェクション対策についていろいろ調べた。

 

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だと複文が使えなくなっててなお良し。

 

※セキュリティチェックこそ自動化すべきだよね。デスマ中とかにセキュリティ意識したコードとか不可能。