page_adsence

2010年9月3日金曜日

symfonyのセキュリティの設定に関して

最近ちょくちょくsymfonyを触るようになってきたので、一度セキュリティに関して調べてみた。
今回気になったのは下記の記事。

http://blog.symfony.jp/2009/03/05/178

この記事ではsf_charsetがUTF-8で、なおかつescaping_methodをESC_ENTITIESにすると問題があるというものです。
古いバージョンのsymfonyではデフォルトがESC_ENTITIESになっていましたが、
1.2以降のsymfonyではデフォルト値がESC_SPECIALCHARSに書き換えられているようですので、
自分で意図的に変更しない限りはトラブルに見舞われることはないと思われますが、一応念のため記事にしておくことにしました。

symfonyでは標準でHTML出力のエスケープ処理が組み込まれており、テンプレートにスカラ、配列、オブジェクトのメソッド呼び出しの結果など、あらゆる値がエスケープされるようになっています。
そのエスケープメソッドがhtmlentitiesであると問題が発生するよということ。
このhtmlentitiesですが、マルチバイトでなければ何の問題もありませんが、
マルチバイトでUTF-8の文字コードの場合に未定義の文字参照が生成されてしまうおそれがあります。
こちらのブログでは「∵」(U+2235)がその該当の文字だということで、取り上げられています。

symfony1.4ではescaping_strategyはデフォルトtrue、escaping_methodもESC_SPECIALCHARSとなっているので、
特に心配する必要はありません。
とはいえ、古いsymfonyを使っている案件の更新とか、途中からアサインされた場合に設定がESC_ENTITIESになっている可能性が0ではないので、一応覚えておこうと思う。

・リファレンス
http://www.symfony-project.org/reference/1_4/ja/04-Settings#chapter_04_sub_escaping_strategy