esc_html
とattribute_escape
フィルターの正確な違いは何ですか?
esc_html()
はesc_html filter
を使い、esc_attr()
はattribute_escape filter
を使います。どちらも<>& "'(小なり、大なり、アンパサンド、二重引用符、一重引用符)をエンコードします。
知っておきたいのですが、セキュリティ上の理由から、それらがまったく異なるのは です。
箱から出しても違いはないようです
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in HTML.
*
* Text passed to esc_html() is stripped of invalid or special characters
* before output.
*
* @since 2.8.0
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'esc_html', $safe_text, $text );
}
function esc_attr( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in an HTML attribute.
*
* Text passed to esc_attr() is stripped of invalid or special characters
* before output.
*
* @since 2.0.6
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'attribute_escape', $safe_text, $text );
}
2つの機能の唯一の違いは、最後に適用されるフィルタです。 WordPressはこれらのフィルタには何も追加しません。そのため標準的なWPインストールではそれらは非操作です。誰かがそれらを必要とするかもしれないというEdgeのケースでそれらは提供されています。
それではデフォルトでは同じですか?
はい! esc_attr
とesc_html
関数は同じ実装を持っています
フィルタは同じですか?
唯一の違いは、名前が異なり、同じように機能し、同じ方法で使用され、どちらのフィルタもコアで使用されないことです。
フィルタは何をしますか?
いいえ! wp_check_invalid_utf8
および_wp_specialchars
が呼び出されると、すべてのエスケープは関数内で行われます。
フィルタはエスケープ処理をしません。プラグインが追加のチェックや処理を行う機会です。
Edgeのケースはありますか?
あなたがフィルタを使う場合だけ、あなたがesc_html
にはフックしたがattribute_escape
にはフックしなかった、あるいはその逆であると言ってください。標準のWPインストールでは、2つの機能は同じですが、違いはありません。
なぜattribute_escape
ではなくesc_attr
ですか?
後方互換性があります。以前はattribute_escape
関数がありましたが、これはesc_
スタイルの関数が追加された後に非推奨としてマークされています。
なぜ私はこれらのフィルタを使うのですか?
¯\_(ツ)_/¯
これはまれな状況です。翻訳APIが置換テキストの検索に悪用されるのと同じ方法で、悪用される可能性があります。これらのフィルタはよく呼ばれるので、これはすでに悪い習慣です。小さな速度の低下は数千倍に拡大されます。
ただし、注意しないと、追加したエスケープを元に戻すことや、最後にエスケープされていないコンテンツを追加することによって、これらの機能のセキュリティが危険にさらされる可能性があります。そのため、フィルターは危険です。
私はこれについて心配する必要がありますか?
いいえ。あなたがこれらのフィルタを使用した場合にのみ心配する必要があります。それはあなた自身の開発における何かがひどく間違っていたという大規模な赤い警報をそれ自体で起動させるべきでした。
関数esc_attr
およびesc_html
は安全に使用でき、コンテンツをエスケープします。あなたがあなたのコードの安全性を重視するならば、あなたはそれらを使用する倫理的で道徳的な義務があります
これはesc_html
を使うべきだということですか?
いいえ、エスケープすることは期待を設定することだけです。あなたが属性を期待しているならば、esc_attr
を使ってください。現時点で機能的に同じであるという理由だけで、セキュリティリリースによって今後も変わることはないという意味ではありません