4

この質問が何度も聞かれていることは知っていますが、私の好みにぴったりの答えがまだ見つからないので、ここでもう一度言います...

CI の xss_filter に関する二極化したコメントをたくさん読んできました。基本的に大多数が悪いと言っています。誰かがそれがどのように悪いのかを詳しく説明できますか、または少なくともそれが悪用される可能性が最も高いシナリオを1つ挙げることができますか? CI 2.1 のセキュリティ クラスを見てきましたが、document.cookie、document.write などの悪意のある文字列を許可しないため、かなり優れていると思います。

サイトに基本的に非 html プレゼンテーションがある場合、データベースに挿入する前にグローバル xss_filter を使用しても安全ですか (または、パフォーマンスに大きな影響を与える場合は、フォームの投稿ごとに使用します)。入力/出力でエスケープするかどうかについての長所と短所について読んでいますが、過半数は出力でのみエスケープする必要があると言っています。しかし、なぜ文字列<a href="javascript:stealCookie()">Click Me</a>をデータベースに保存できるようにするのでしょうか?

私が気に入らないことの1つはjavascript:、に変換されること[removed]です。CI のセキュリティ コア$_never_allowed_str配列を拡張して、許可されていない文字列が[removed].

私が読んだこれの最も合理的な不正行為の例は、ユーザーがパスワードを持っている場合javascript:123にクリーンアップされ[removed]123、このような文字列document.write123がユーザーのパスワードとしても渡されることです。繰り返しになりますが、それが起こる可能性はどのくらいですか。たとえそれが起こったとしても、サイトに与える可能性のある実際の害は考えられません.

ありがとう

4

1 に答える 1

4

基本的に XSS は OUTPUT の問題ですが、Codeigniter はそれを INPUT の問題として扱います。

どこが悪いのか誰か詳しく教えてください...

問題は、 xss_clean が INPUT を変更することです。つまり、一部のシナリオ (説明したパスワードの問題など) では、入力が期待どおりではありません。

...または少なくとも、悪用される可能性が最も高いシナリオを 1 つ挙げてください。

「javascript」などの特定のキーワードのみを検索します。xss_clean が検出しないスクリプト アクションは他にもあります。さらに、「新しい」攻撃から保護することはできません。

私が気に入らないことの 1 つは javascript: であり、そのようなものは [削除] に変換されます。CI のセキュリティ コア $_never_allowed_str 配列を拡張して、許可されていない文字列が [削除] ではなく空を返すようにすることはできますか?

あなたはこれを行うことができます - しかし、あなたは貧弱な解決策に応急処置を施すだけです.

入力/出力でエスケープするかどうかについての長所と短所について読んでいますが、過半数は出力でのみエスケープする必要があると言っています。

これが正解です。すべての出力をエスケープすると、入力を変更することなく、真の XSS 保護が得られます。

OWASP は XSS の詳細をここで説明します

XSS に関する適切な Codeigniter フォーラム スレッドを参照してください。

個人的には、Codeigniter での XSS 保護に対する私のアプローチは、入力に対して XSS クリーニングを一切行わないことです。_output でフックを実行します。これにより、すべての「view_data」(データをビューに送信するために使用する変数) が消去されます。

コントローラーに「$view_data['clean_output'] = false」を挿入することで、XSS クリーンを実行したくない場合に切り替えることができます。これはフックによってチェックされます。

if (( ! isset($this->CI->view_data['clean_output'])) || ($this->CI->view_data['clean_output']))
   {
    // Apply to all in the list
    $this->CI->view_data = array_map("htmlspecialchars", $this->CI->view_data);
   }  

これにより、サイト全体で自動的かつ完全な XSS 保護が得られます。わずか数行のコードで、パフォーマンスに影響はありません。

于 2012-06-07T05:56:02.720 に答える