openは使わずsysopenを使うように

近年Webアプリケーションの脆弱性狙った事件が頻発していることもあって、セキュリティチェックなんていうのがあったりするのですが、「Perlではopenは特別な理由がない限りは使わずsysopenを使うこと」となっていたりします。

多分元ネタとしてIPAのセキュアプログラミング講座を使っていてsysopenの話が出てきたのでしょうが、ダイレクトOSコマンドインジェクションの脆弱性対策というのであれば、openでファイルを開く時は3つの引数を指定する方法*1にすることというようにして欲しいところ。

社内向けにこの手のガイドを作成するメンバーの一人になったので3引数方式のopenを薦めたいと思っているのですが、Googleで調べてみるとopenの3引数よりもsysopenの方がたくさんヒットしてしまうのでちょっと書いてみました。

せっかくの機会なので、Perlに関してはXSS対策と称してテンプレートエンジン(Template-ToolKitやHTML::Template)やSQLインジェクション対策としてClass::DBIやバインドメカニズムを広めたい所です。あとどさくさに紛れてuse strictやuse warningsも。

*1:Perl 5.6から使える方法で、ダイレクトOSコマンドインジェクション対策としてはsysopenを使うのと同じ効果がある