私はWPテーマとプラグインのセキュリティについて多くの情報を検討してきました。そしてテーマとプラグインで属性とHTML値をエスケープするべきであるという概念を理解しました。私はbloginfo()
とecho get_bloginfo()
が標準とesc_html()
またはesc_attr()
関数の中で使われているのを見ました。
創世記 と_s 、Automatticの基本テーマは両方ともこれらの値をエスケープしますが、WP自身のコーデックステーマ標準ガイドはこれらの値をエスケープすることについて何も言いません。 WPコード(wp-includes/option.php
)を調べたところ、get_option()
から渡される値のサニタイズが少し行われているようですが、プラグインが特定の値を上書きする可能性があるフィルタもあります。
この事実が、私がそれをエスケープすべきだと考える方向に導いているのです。誰もがこれについて私を啓発することができますか?
私たちはあなたの質問に対する答えを得るためにここでもう少し深く見なければなりません。
したがって、bloginfo
はget_bloginfo
を囲む単純なラッパーです。
<?php
function bloginfo( $show='' ) {
echo get_bloginfo( $show, 'display' );
}
2番目の引数display
に注目してください。それが何をするのか見てみましょう。
<?php
function get_bloginfo( $show = '', $filter = 'raw' ) {
// snip snip, $output is fetched somewhere in here
if ( 'display' == $filter ) {
if ( $url )
$output = apply_filters('bloginfo_url', $output, $show);
else
$output = apply_filters('bloginfo', $output, $show);
}
return $output;
}
フィルタがdisplay
に設定されている場合、get_bloginfo
の出力はフィルタを通して実行されます。
WPは、関数内でesc_html
への呼び出しのようにハードコードするのではなく、独自のフックシステムを使用して処理を行います。それが起こる場所を見つけるための場所はwp-includes/default-filters.php
にあります。そのファイルでbloginfo
をクイック検索すると、.
<?php
// Format strings for display.
foreach ( array( 'comment_author', 'term_name', 'link_name', 'link_description', 'link_notes', 'bloginfo', 'wp_title', 'widget_title' ) as $filter ) {
add_filter( $filter, 'wptexturize' );
add_filter( $filter, 'convert_chars' );
add_filter( $filter, 'esc_html' );
}
bloginfo
はforeach
配列に隠されています。ご覧のとおり、bloginfo
の出力はesc_html
でエスケープされます。
言い換えれば、これ:
<?php
bloginfo('name');
これと同等です:
<?php
echo esc_html(get_bloginfo('name'));
またはこれ:
<?php
echo get_bloginfo('name', 'display');
したがって、いいえ、bloginfo
の出力をエスケープする必要はありません。 2番目の引数がdisplay
に設定されている限り、get_bloginfo
の出力も行われません。
ただし、注意点は、誰でもbloginfo
からesc_html
フィルタを削除できることです。そのため、出力をエスケープするほうが安全な可能性があります。もちろん、bloginfo
の出力をHTML表示以外の目的(たとえば、画像のalt属性など)に使用している場合は、esc_attr
を介して実行する必要があります。