[Codeigniter-users] CodeIgniter の XSS 対策はどうあるべきか?

Back to archive index

Yoshiyuki Okamoto okamo****@gmail*****
2011年 6月 21日 (火) 22:55:18 JST


お世話になります。
岡本です。


> http://d.hatena.ne.jp/Kenji_s/20110621/1308632827
⇒こちら参考になります。参考にさせていただきます。
こういった内容は、浸透してあたりまえの定石となるとよいですよね。



> また、個人的には、CI の XSS フィルタは廃止の方向にしたほうが
> いいかなと思います。フィルタリング漏れが起こらない保証はないですから。
なるほど、ないよりはあった方がいいと思いますが、気休め程度で考えた方がよさそうですね。
根本対策は別に必要であるということですね。

> なるほど。デフォルトでフィルタリングというのは考えたことありませんでした。
>
> この場合、バリデーションはどうされるのでしょうか?

CIのFormValidationを使うというケースで考えて、
思いつき下記2パターンぐらいかと思いました。


(その1)バリデーションを使う場合、バリデータからバリデート済の入力値のみを取得可能なAPIとし、
  バリデーション実行後のバリデーターから入力値を取得する。

<実装イメージ>

// バリデーション実行
oForm_validation->run();

// バリデーションOKの値を取得(バリデーションしていないfieldは取得できない)
oForm_validation->getValidatedPostValue('field');



(その2)入力値パターンチェックについては、INPUTクラスのフィルタで例外を発生させ、そこでバリデーション代わりとする。
  パターンチェック以外のバリデーション(項目間関連チェック、マスタチェック等)はバリデーターを使う。

<実装イメージ>
try
{
 $param1 = $CI->input->post('param1');
 $param2 = $CI->input->post('param2');
}
catch(InputException e)
{
  // エラー処理
}


いずれにしろ、inputクラスやバリデーターを通してでないと、入力値を取得できないようにし、
業務部分の開発者が意識してフィルタやバリデーションを書かないと、入力値が取得できないようにしたいというのが主旨です。






> そうですね。入力でのチェックと出力でのエスケープは別途わけて考えて、依存しない
> 方が漏れも減るでしょうから好ましいですね。


今通販システムに取り組んでいるので、セキュリティの対策を勉強したいです。
PCI DSSや KENJIさんが書かれたような具体的な対策を実践していきたいですね。

それと、PHPでもほかの言語でも具体的対策が定石としてひろまって、いくとありがたいです。


ながなが失礼しました。
また何かあれば、投稿します。




Codeigniter-users メーリングリストの案内
Back to archive index