web-dev-qa-db-ja.com

phpcsのwp_oembed_getをエスケープする方法

私はニース、有効なWPテーマコードを書くことを確実にするのを助けるためにphpcsを使用していますが、出力前のエスケープに関して次の問題に出くわしています。

echo wp_oembed_get( 'https://www.youtube.com/watch?v=someidhere' );を使おうとすると、それは期待通りに動作します - 私はページ上にニースのyoutubeビデオを得ます。

しかし、phpcsはexpected next thing to be an escaping function, not wp_oembed_getをスローしますが、これは出力時にすべてをエスケープすることになっているため、それほど驚くことではありません。

私はwp_kses_post()(ビデオは単に表示されない - 出力なし)や他のエスケープ関数を使うことができません。

Phpcs標準を確実に満たすようにするには、どうすればよいでしょうか。

4
Tims

PHPCSの WPCS標準 は "公式"ではないことに注意してください。私はメンテナの一人です、そして私たちができることはWordPressが提案する標準に合うように最善を尽くすことです。この場合、どうやってwp_oembed_get()の出力をエスケープするのかわかりません。戻り値がいくつかのフィルタを通過するときに関数を実際にエスケープする必要があり、実際にはoEmbedプロバイダからの未検証の生のHTMLが含まれる可能性があります。

OEmbedプロバイダ、フィルタ、そしてあなたのネットワーク接続を信頼するなら、このコード行をホワイトリストに載せることが一つの選択肢になるでしょう。

echo wp_oembed_get( 'https://www.youtube.com/watch?v=someidhere' ); // WPCS: XSS OK.

ただし、URLがユーザー指定または何かで、プラグインのコンテキストで考えられるプロバイダを信頼するのが安全だとは思わない場合は、で返される生の値を見てください。 wp_oembed_get()と、期待するHTML要素と属性のホワイトリストを作成して、wp_keses()に渡すことについて学んでください。

WordPressのコア開発者は明らかにoEmbed発見によるリスクはそれほど大きくないと感じているので、ユーザーがリンクを投稿に貼り付けることができ、それらは自動的に埋め込まれます。 WPCSは、これらのことについて単なる超妄想的なものであり、いつアドバイスを塩の粒で受けてもよいかを知るのは開発者次第です。後期エスケープポリシーの最も厳格な支持者の1人はwp.com VIPです。ただし、開発者向けドキュメントを見ると、 wp_oembed_get() の使用が許可されているように見えますが、追加のキャッシュ機能にカスタム実装の wpcom_vip_wp_oembed_get() を使用することをお勧めします。

したがって、結局、wp_oembed_get()をエスケープすることについてあまり心配しないでください。 WPCSのGitHubリポジトリ で問題を提起した場合、この関数はデフォルトのホワイトリストに追加されることさえあります。

9
J.D.