私はセキュリティ担当者からフィードバックを得ました、そして、彼は私が私のコードでユーザー入力の適切なエスケープを使うべきであると指摘しました。だから私はいくつかの研究をして、エスケープ機能を見つけました。
両者の違いは何ですか?いつesc_html()
を、そしていつesc_attr()
を使うべきですか?そして最後に_e()
と一緒にこれらの関数を使うべきときはいつですか?
esc_html()
はHTMLとして解析されないように文字列をエスケープします。たとえば、<
のような文字は<
に変換されます。これは読者には同じように見えますが、出力される値が<script>
であれば、ブラウザによって実際のスクリプトタグとして解釈されないことを意味します。
出力される値がHTMLを含むべきでないときはいつでもこの関数を使用してください。
esc_attr()
はclass=""
のようにHTML属性で安全に使用できるように文字列をエスケープします。これにより、値がHTML属性から抜け出すのを防ぐことができます。たとえば、値が"><script>alert();</script>
でHTML属性に出力しようとした場合、現在のHTMLタグを閉じてスクリプトタグを開きます。これは危険です。値をエスケープすることによって、HTML属性を閉じて危険なHTMLをタグ付けして出力することはできません。
HTML属性内の値を出力するときにこの関数を使用します。
esc_url()
は有効なURLであることを確認するために文字列をエスケープします。
href=""
またはsrc=""
属性内の値を出力するときにこの関数を使用します。
esc_textarea()
は<textarea>
要素で安全に使用できるように値をエスケープします。この関数で値をエスケープすることで、<textarea<
内に出力されている値が<textarea>
要素を閉じて独自のHTMLを出力するのを防ぎます。
<textarea>
要素内の値を出力するときにこの関数を使用します。
esc_html()
とesc_attr()
には、__()
、_e()
、_x()
で終わるバージョンもあります。翻訳可能な文字列を出力するためのものです。
WordPressには、翻訳可能なテキストを出力するための関数__()
、_e()
、および_x()
があります。 __()
は を翻訳可能な文字列を返し、_e()
echoes は翻訳可能な文字列を、そして_x()
は与えられたコンテキストを持つ翻訳可能な文字列を返します。あなたはおそらくそれらを以前に見たことがあるでしょう。
必ずしも安全な値を含むように翻訳ファイルを信頼することはできないので、翻訳可能な文字列を出力するときにこれらの関数を使用すると、出力される文字列が上記と同じ問題を引き起こすことはありません。
翻訳可能な文字列を出力するときにこれらの関数を使用します。
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
と同じように動作しますが、エコーしないので変数に格納できます。