С точки зрения безопасности, следует ли избегать бэндфина () или get_bloginfo ()?

Я просматривал много информации о теме WP и безопасности плагинов и понимаю концепцию, что вам следует избегать атрибутов и значений HTML в темах и плагинах. Я видел bloginfo() и echo get_bloginfo() используемые как стандартные, так и внутри функции esc_html() или esc_attr() .

Genesis и _s , базовая тема Automattic обе эти значения сохраняются, но руководство WP по собственным правилам WPx не говорит ничего об избежании этих значений. Я просмотрел WP-код ( wp-includes/option.php ), и кажется, что есть небольшая обработка данных, переданных из get_option() но также выглядит как фильтр, который плагин может перезаписать для определенных значений.

Именно этот факт приводит меня к мысли, что его нужно избегать. Может ли кто-нибудь просветить меня по этому поводу?

Solutions Collecting From Web of "С точки зрения безопасности, следует ли избегать бэндфина () или get_bloginfo ()?"

Нам нужно посмотреть немного глубже, чтобы получить ответ на ваш вопрос.

Итак, bloginfo – это простая оболочка вокруг get_bloginfo .

 <?php function bloginfo( $show='' ) { echo get_bloginfo( $show, 'display' ); } 

Обратите внимание на 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 запускается через фильтр.

Вместо hardcode что-то вроде вызова esc_html в функции, WP использует свою собственную систему hook для выполнения действий. Место для поиска, где это происходит, – это 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 с esc_html .

Другими словами, это:

 <?php bloginfo('name'); 

Это эквивалентно этому:

 <?php echo esc_html(get_bloginfo('name')); 

Или это:

 <?php echo get_bloginfo('name', 'display'); 

Таким образом, нет, выход bloginfo не должен быть экранирован. Также не выводится вывод get_bloginfo пока display второй аргумент.

Однако предостережение заключается в том, что любой может удалить фильтр bloginfo из bloginfo . Так что, скорее всего, это безопаснее, чтобы избежать выхода. И, конечно, если вы используете вывод bloginfo для чего-либо иного, кроме отображения HTML (например, в атрибуте alt изображения), вы должны запустить его через esc_attr .