こんにちは私はいつ、なぜこれらのesc-alternativesを使うべきか理解しようとしています、そして今のところ私は入力が間違った文字を含んでいないことを保証する必要があると思います。
私がまだ疑問に思っているのは、HTMLフィールドでesc_attrを常に使用するべきか、それとも連絡フォームの入力フィールドを例にするべきかということです。そして、私はいつも私自身のすべてのURLにesc_urlを使うべきです、例えばimage src paths?
そしてthe_title()はどうですか?コード内のすべてのエコーに対して、またはユーザーからの入力がある可能性がある場合にのみ、これらのエスケープのいずれかを使用する必要がありますか?
はい!あなたはいつも逃げているべきです
遅く逃げる、しばしば逃げる
エスケープとは意図的なことです。URLを出力する場合はesc_url
を使用します。それが間違いなくURLになります(データが悪意のある場合は安全になります)
私がまだ疑問に思っているのは、HTMLフィールドでesc_attrを常に使用するべきか、それとも連絡フォームの入力フィールドを例にするべきかということです。そして、私はいつも私自身のすべてのURLにesc_urlを使うべきです、例えばimage src paths?
ハードコードされたURLの場合例えば。 "http://example.com"
? いいえ 、安全だとわかっている
それが関数や他のソースからのURLであるならば?例えば。 echo get_permalink()
またはecho $url
? はい、あなたは逃げるべきです それが安全であるかどうかを知る方法はありません
それが内部的に出力し、echo
ステートメントを必要としない関数ならば?例えば。 the_permalink()
? いいえ これをエスケープする方法はありません、関数は内部的にエスケープする必要があります。緊急時には出力バッファを使用することができますが、その方法は狂気につながります
そしてthe_title()はどうですか?コード内のすべてのエコーに対して、またはユーザーからの入力がある可能性がある場合にのみ、これらのエスケープのいずれかを使用する必要がありますか?
内部的に出力する関数をエスケープする方法はありません。 the_title
は他のものと同じように使うのがよいでしょう
bloginfo
セキュリティ上の理由から、この機能は絶対に避けてください。 bloginfo
は常に内部的にエスケープするわけではなく、内部的に出力されるのでエスケープを追加する方法はありません。
get_bloginfo
を使用して結果をエスケープしてください。
<a href="<?php echo esc_url( get_bloginfo( 'site' ) ); ?>">
get_bloginfo
は値を出力するのではなく返すので、エスケープ関数を使うことができます。
the_content
のように物事をフィルタに通したい場合がありますが、結果をエスケープするとタグが削除されます。
たとえば、これにより、存在する埋め込みビデオがすべて削除されます。
echo wp_kses_post( apply_filters( 'the_content', $stuff ) );
解決策は、代わりにこれを行うことです。
echo apply_filters( 'the_content', wp_kses_post( $stuff ) );
私たちは入力が安全であることを私たちが知っているという考えなので、出力は安全でなければなりません。これは、そのフィルタで実行されているコードもそれに応じてエスケープすることを前提としています。 WP Coreフィルタを使用してこれらの状況でこれを行いますが、できるだけ自分自身のフィルタおよびコードでこれを必要としないようにします。
エスケープが必要な値が、通常管理画面にあるようにコードから完全に生成されている場合は、はい、常にエスケープします。
コアのAPIの結果を出力する必要がある場合、状況がより複雑になります。APIから返される値がすでにエスケープされているかどうかを確認するにはコードを調べてください。the_title
はおそらくエスケープされます。 APIを使用してタグ名を取得するには、エスケープする必要があります。
さらに難しい状況は、出力がフィルタやウィジェットで返される値のように、コアの上位層への単なる入力である場合です。フロントエンド側ではウィジェットのタイトルを除いてフォームで得たすべての値をエスケープする必要があるので、ウィジェットは厄介です。
経験則、コアまたはコアテーマに同等の機能がある場合は、それらがエスケープを処理する方法を調べて、同じことを行います。