web-dev-qa-db-ja.com

どっち WP 関数esc_html()またはesc_url()を使用する必要がありますか?

私は人々がesc_html()のような特定のWP関数でesc_url()home_url('/')のどちらかを使っている状況に出会いました。 <a>の最初のアンカータグにある例は、次のようにホームページにリンクバックします。

<a href="<?php echo esc_url( home_url( '/' ) ); ?>"> 

どのWP関数をエスケープする必要があるのか​​、またesc_html()esc_url()のどちらを使用するのかはどのように判断しますか。

どんなアドバイスやガイダンスも素晴らしいでしょう。

7
The Chewy

データを返すもの.

  • 関数が内部的に出力するなら、それはエスケープする責任があります。
  • 関数が使用のためにデータを返す場合、二重エスケープを避けるためにエスケープ解除されます、それはあなたの責任です

これは、変数がエスケープされても疑いがないように、常にエスケープを遅らせるべきだからです。

home_urlなどのAPIの出力が事前にエスケープされている場合、これはもはや当てはまりません。また、二重エスケープも導入されます。これは、一部のシナリオで過去のエスケープを回避するために使用できます。

いくつかのさらなるメモ:

  • 静的な文字列をエスケープしても構わない、無意味です
  • the_permalinkのような関数をesc_urlなどでラップしようとしないでください。エスケープ関数はまだ関数であり、何かを保護するようにPHPに指示する魔法の修飾子や蛍光ペンではありません。
  • 複雑なHTMLフラグメントを変数に入れたり、データを返したりしないでください。データをエスケープする必要はありませんが、複雑なHTMLフラグメントをエスケープすることは容易ではなく、通常は安全に実行することは不可能です。
  • ショートコード/フィルタを使用するときは、追加/変更したビットを必ずエスケープするようにしてください。そうは言っても、それがあなた自身のコードを導くのに使われているのであれば、それを入力として信用しないでください。
9
Tom J Nowell

信頼できないデータ(データベースからのデータを含む)の出力はサニタイズする必要があります。 WordPress Codexは利用可能な機能について説明しています: https://codex.wordpress.org/Data_Validation

WordPress Coding Standards に従ったコードスニファは、WordPressのコア機能からの出力もサニタイズする必要があります。たとえば、PhpStormでそのようなコードスニファをオンにすることができます。

時にはそのような要件は過大ですが、より信頼性の高いコードを得るためにはコーディング標準に従うことをお勧めします。

3
KAGG Design