esc_html、esc_attr、esc_html_eなどの違いは何ですか?


12

セキュリティ担当者からフィードバックがあり、コードではユーザー入力の適切なエスケープを使用する必要があると彼は指摘しました。だから私はいくつかの研究を行って、エスケープ関数を見つけました。

それらの違いは何ですか?いつesc_html()、いつ使用すればよいesc_attr()ですか?そして、いつこれらの関数を_e()最後に使用する必要がありますか?


1
ドキュメントを読みましか?
Jacob Peattie

2
はい、それは私をさらに混乱させました:(
ボールドリック

回答:


19

esc_html()文字列をエスケープして、HTMLとして解析されないようにします。のような文字<&lt;、たとえばに変換されます。これはリーダーには同じように見えますが、出力される値が<script>ブラウザーによって実際のスクリプトタグとして解釈されないことを意味します。

出力される値にHTMLが含まれないようにする場合は常に、この関数を使用します。

esc_attr()class=""たとえば、HTML属性で安全に使用できるように文字列をエスケープします。これにより、値がHTML属性から抜け出すことが防止されます。たとえば、値が"><script>alert();</script>HTML属性で出力しようとした場合、現在のHTMLタグを閉じてスクリプトタグを開きます。これは安全ではありません。値をエスケープすると、HTML属性とタグを閉じて安全でないHTMLを出力できなくなります。

この属性は、HTML属性内の値を出力するときに使用します。

esc_url() 文字列をエスケープして、それが有効なURLであることを確認します。

href=""or src=""属性内の値を出力するときにこの関数を使用します。

esc_textarea()<textarea>要素で安全に使用できるように値をエスケープします。この関数で値をエスケープすることにより、内部で出力される値が要素を<textarea<閉じて<textarea>独自のHTMLを出力するのを防ぎます。

<textarea>要素内の値を出力するときにこの関数を使用します。

esc_html()そしてesc_attr()また、で終わるのバージョンを持っている__()_e()_x()。これらは翻訳可能な文字列を出力するためのものです。

WordPressは、機能を持ち__()_e()かつ_x()、翻訳可能なテキストを出力します。__() 戻り翻訳可能な文字列、_e() エコー A翻訳可能な文字列を、そして_x()与えられた文脈と翻訳可能文字列を返します。あなたはおそらくそれらを以前に見たことがあるでしょう。

安全な値が含まれている翻訳ファイルを必ずしも信頼できるとは限らないため、翻訳可能な文字列を出力するときにこれらの関数を使用すると、出力されている文字列が上記と同じ問題を引き起こすことはありません。

翻訳可能な文字列を出力するときにこれらの関数を使用します。


2
デフォルトでは、差がないことに注意してくださいesc_htmlesc_attr:(彼らは異なる未使用のフィルタを有する)、同じコードが使用されるwordpress.stackexchange.com/questions/264698/...
baptx

4

esc_htmlたとえば<p>タグの間など、html内で使用されます

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr 次のようにhtmlタグの属性値をエスケープするために使用されます。

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

_e最後に適用すると、テキストドメインで使用し、自動的にエコーされます。例:

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

他に_eも存在する__と同じんどの_eあなたが変数に格納することができますので、しかし、doesntのは、それをエコー。


2
_eエコーするためだけではなく、ローカリゼーションのためです。したがって、文字列が関数に渡される場合にのみ使用し、テキストドメインを含める必要があります。あなたの最後の例はそれを誤用しています。
Jacob Peattie

@JacobPeattie my bad、i'll update ... EDIT Fixed
jrmd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.