1

CodeIgniter には、XSS フィルタリング用の便利な API がいくつか用意されています。

  • config.php の「global_xss_filtering」。
  • フォーム検証ライブラリを使用する場合の個々のフィールドの 'xss_clean' ルール。

この機能を使用すると、出力時にフィールドをエスケープする必要がなくなりますか?

4

1 に答える 1

4

xss_clean が保護しない状況がいくつかあります。 問題 470には、次の例が含まれています。

public function index()
{

    $name = $this->security->xss_clean('hover me" onmouseover=alert("XSS2") "'); 
    echo '</div>Name:<input value="'.$name.'">';
    echo '</body></html>';
}

$name開発者からの回答は、これは設計によるものであり、 を使用してエスケープする必要があることを示唆していましたform_prep()

フォームが検証に失敗したときにユーザー入力を保持するためにを使用するset_value('field-name', 'default')と、... form_prep() の呼び出しが試みられます。注意点は、フォーム検証ライブラリをロードしていない場合、'default' パラメータをエスケープしないことです。(問題 1781、3.0 -dev で修正)。

現在の 3.0-dev を実行している場合form_prep()、エスケープする文字についてより具体的です。どちらの方法でも XSS を回避する必要があります。状況によっては予期しない結果が生じるだけです。たとえば、3.0-dev でリテラル " " を入力しようとして&amp;、フォームの検証に失敗した場合、フィールド値は&警告なしで に変更されます。この変更は、二重エスケープに関する問題を回避するための試みでした ( 1953 年の問題)。

于 2012-12-16T16:25:21.713 に答える