web-dev-qa-db-ja.com

Esc_htmlフィルタとattribute_escapeフィルタの違いは何ですか?

esc_htmlattribute_escapeフィルターの正確な違いは何ですか?

esc_html()esc_html filterを使い、esc_attr()attribute_escape filterを使います。どちらも<>& "'(小なり、大なり、アンパサンド、二重引用符、一重引用符)をエンコードします。

知っておきたいのですが、セキュリティ上の理由から、それらがまったく異なるのは です。

7
djadmin

箱から出しても違いはないようです

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のケースでそれらは提供されています。

クイックQ&A

それではデフォルトでは同じですか?

はい! esc_attresc_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を使ってください。現時点で機能的に同じであるという理由だけで、セキュリティリリースによって今後も変わることはないという意味ではありません

8
Tom J Nowell