web-dev-qa-db-ja.com

check_plain()で十分ですか?

check_plain() は、ユーザーがブラウザに入力したテキストを再表示するのに十分ですか、それとも filter_xss() でフィルタリングする必要がありますか?

16
Citricguy

問題はcheck_plain(filter_xss($string))またはfilter_xss(check_plain($string))の使用に関するものだと思います。

check_plain()filter_xss()には2つの異なる目的がありますが、対照的に、次の目的があります。

  • check_plain()は、HTMLとして表示されるプレーンテキスト文字列に特殊文字をエンコードします。
  • filter_xss()は、HTML文字列をフィルタリングして、クロスサイトスクリプティング(XSS)の脆弱性を防ぎます。特に、その目的は次のとおりです。

    • ブラウザをだますことができる文字や構造を削除する
    • すべてのHTMLエンティティが整形式であることを確認する
    • すべてのHTMLタグと属性が整形式であることを確認する
    • HTMLタグに、許可されていないプロトコル(javascript:など)のURLが含まれていないことを確認します。

check_plain()を使用する場合、関数に渡される文字列はプレーンテキストとして使用されることになっています。そのような場合、filter_xss()は不要です。 filter_xss()を使用する場合、関数に渡される文字列はHTMLであると想定され、check_plain()は不要です。

質問が同じ文字列の異なる部分でcheck_plain()filter_xss()を使用することに関するものである場合、彼のコメントでgregglesが指摘したように、(たとえば)check_plain()を使用できます。タグ属性の内容、およびHTMLタグ全体のfilter_xss()

26
kiamlaluno