CodeIgniter には、XSS フィルタリング用の便利な API がいくつか用意されています。
- config.php の「global_xss_filtering」。
- フォーム検証ライブラリを使用する場合の個々のフィールドの 'xss_clean' ルール。
この機能を使用すると、出力時にフィールドをエスケープする必要がなくなりますか?
CodeIgniter には、XSS フィルタリング用の便利な API がいくつか用意されています。
この機能を使用すると、出力時にフィールドをエスケープする必要がなくなりますか?
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 でリテラル " " を入力しようとして&
、フォームの検証に失敗した場合、フィールド値は&
警告なしで に変更されます。この変更は、二重エスケープに関する問題を回避するための試みでした ( 1953 年の問題)。