web-dev-qa-db-ja.com

HTML出力はesc_html()AND wp_kses()を通して渡されるべきですか?

私はesc_html()wp_kses()の異なる使い方について混乱しています。 esc_html()は特殊文字をそれらのHTMLエンティティに変換し、wp_kses()は不要なタグ(例:<script>)を削除することを理解していますが、どのコンテキストでそれらを一緒にまたは別々に使用すべきかわかりません。

esc_html()を介して信頼できないHTMLを実行した場合、JavaScriptはブラウザによってレンダリングされるのではなくプレーンテキストで表示されるので、その時点では安全です。 wp_kses()を通してそれを実行する唯一の理由は、生のスクリプトが表示されないようにすることでしょうか。

基本的に、esc_html()はそれを安全にし、wp_kses()はそれをきれいにします。あれは正しいですか?

11
Ian Dunn

一般的な規則は、少なくとも Mark Jaquithによって支持されている は、入力時にサニタイズ、出力時にエスケープ(この規則の結果として早期にサニタイズ、遅くエスケープ))です。

そのため、信頼できないデータをデータベースに格納するの場合はサニタイズフィルタ(kses()ファミリなど)を使用し、信頼できないデータをテンプレートに出力するの場合はエスケープフィルタ(つまりesc_*()ファミリ)を使用します。

16
Chip Bennett

HTMLの一部のサブセットを結果に含めることを許可する場合は、kses関数を使用してください。たとえば、コメントでは、太字、斜体、リンクなどにHTMLを使用できます。

Esc_html関数を使用して、HTMLを完全にエスケープする必要があります。ブラウザによってHTML以外のものとして解釈されるようなものに変換されない限り、HTMLはそれを通過しません。

13
Otto