Kenji です。
On Thu, 17 Dec 2015 18:10:12 -0800 (PST)
Masamitsu terasawan <
tera...@gmail.com> wrote:
> xss_cleanについて、どのように利用すべきか整理できていないため
> もし詳しい方がいらっしゃいましたら、以下について教えていただきたいです。
>
> 1. xss_clean の利用について
> global_xss_filteringは、CI3ではDEPRECATEDとされているようで、
> 積極的に利用する必要はないという認識です。
>
https://github.com/bcit-ci/CodeIgniter/commit/9187ed3516ba403d09fc88ebcf6ead7364f75c4d
>
> ですが、XSS filteringはinputではなく、output時に利用するものだという記載について
> 具体的にどのようにすべきか理解できていません。
>
> 以下のようなメソッドの第二引数にTRUEを指定するケースというのは
> 入力データをそのままviewなどに出力する場合ということでしょうか?
>
> $this->input->post()
> $this->input->get()
> $this->input->cookie()
> $this->input->server()
私の意見では XSS filtering を使うケースはありません。
XSS filtering は過去何度も何度も脆弱性が指摘されて修正されて
おり、根本的に安全かどうかは疑問があります。
ただし、もし上記のメソッドの第二引数にTRUEを指定するなら、
その返り値をそのまま view で表示することになると思います。
XSS filtering にバグがなければ、XSS されないことが保証されます。
> 2. html_escape について
> 以下で、htmlspecialchars との比較がされていますが(CI2のようですが)
> CodeIgniter ユーザが CodeIgniter の XSS フィルタについて知るべき 5つのこと - A Day in Serenity @
> kenjis
>
http://d.hatena.ne.jp/Kenji_s/20110709/1310163972
>
> 基本的には出力時には html_escape を用いるべきという認識ですが
> 合っていますでしょうか?
そうです。出力時にすべてエスケープするというのが一般的な XSS 対策です。
ただし、出力するすべての変数に html_escape() を適用するという
アプローチは漏れが生じやすいのでお薦めしません。
http://blog.a-way-out.net/blog/2015/06/23/codeigniter-tetti-xss/
参照。
> また、少し話がぞれますが、Railsのように全ての出力用変数に自動でescape処理をかける実装というのは
> CIでは難しいのでしょうか?
標準だと CI のビューは生の PHP なので、ビューに渡すときに変数を自動エスケープ
する処理をどうにか追加するというアプローチが考えられますが、これはオブジェクトを
どう処理するかという問題があり、あまりお薦めしません。
ビューでの出力時に専用の出力関数を用意してそれでエスケープして出力するという
アプローチの方が簡単だと思います。ビューに echo $var; とか書かれたら XSS に
なる可能性ありますが、echo などが使われていないかどうかは、ビューをチェック
すればわかりますので。
いずれにしても、CI に自動エスケープの機能はありません。
それから、Rails は ERB だと思うので、テンプレートエンジンを使っているという
ことかと思います。CI でもテンプレートエンジンを使えば簡単にできます。
通常は Twig なり Smarty なりを使い、テンプレートエンジンの機能で自動エスケープ
するのが一般的であり、そのような方法をお薦めします。
// Kenji