web-dev-qa-db-ja.com

データURIをエスケープするためのベストプラクティスは何ですか?

通常、表示する前にURLをエスケープするにはesc_url()を使用します。その 'URL'がデータURI(例えば'data:image/svg+xml;base64,...')である場合、それはesc_url()によって空白にされます。

データ検証のコーデックスページ では、URLのエスケープについて次のように説明しています

URLをサニタイズするときは常にesc_urlを使用します(テキストノード、属性ノード、その他の場所)。提供されているホワイトリストプロトコル(http、https、ftp、ftps、mailto、news、irc、Gopher、nntp、feed、telnetにデフォルト設定されている)のいずれも持たないURLを拒否し、無効な文字を削除し、危険な文字を削除します。 3.0で廃止予定のclean_url()を置き換えます。

データURIはこの関数では扱われず、他の標準のWPエスケープ関数でも扱われないようです。

WordPressでデータURIをエスケープするための確立されたベストプラクティスはありますか?

4
Tim Malone

許可されたプロトコルを含む配列を esc_url() 関数に渡すことは可能です。データURLの場合、デフォルトで wp_allowed_protocols() でホワイトリストに登録されていないため、これにはdataスキームを含める必要があります。

esc_url( $data_url, array( 'data' ) );
3
JHoffmann

データURIは、あまりよくないlしかし、それはは属性です。属性内でエスケープするにはesc_attrを使用し、それ以外の場所ではesc_htmlを使用します。そのエスケープが重要なのは、あなたが何を期待しているのかを示すことです。 URLが必要な場合はesc_urlを、属性の場合はesc_attrを、HTMLのないテキストの場合はesc_htmlなどを使用してください。

esc_urlも同じように動作しますが、最初にプロトコルを強制するなどの追加の規則があります。

1
Tom J Nowell