Потенциальная уязвимость WordPress с использованием Heredoc

#php #wordpress #security

#php #wordpress #Безопасность

Вопрос:

У меня есть функция в плагине, которая создает сообщение программно. Он использует heredoc для создания HTML-кода для публикации, и я интерполирую plugins_url() присвоенный переменной.

Создает ли этот подход уязвимость, которую можно использовать, пожалуйста? Если да, то как это будет работать — что должен сделать хакер, чтобы использовать его?

У меня есть if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly в верхней части файла.

Моя функция приведена ниже:

 function ra_add_post() {
    $prev_post = get_page_by_title( 'Tile Puzzle',
                    'OBJECT',
                    'post' );

    if ( $prev_post->post_status == false || $prev_post->post_status == 'trash' ):
    $plugins_url     = plugins_url();
    $html        = <<<_HERE
<div class="flex-container">
    <div class="board"></div>
</div>

<audio id="audio" src="$plugins_url/tile-puzzle/Success-sound-effect.mp3"></audio>
_HERE;
    endif;

    $new_post = array(
    'post_title'     => 'Tile Puzzle',
    'post_content'   => $html,
    'post_status'    => 'publish'
    );
    wp_insert_post( $new_post );
}

register_activation_hook( __FILE__,
              'ra_add_post' );
  

Ответ №1:

Это не должно быть проблемой. Взгляните на wp_insert_post() документы. Он автоматически запускает данные sanitize_post() , достаточные для их очистки.

Также plugins_url() это просто причудливый способ вернуть правильную схему URL в папку ваших плагинов (или плагинов MU), на самом деле это не делает ничего опасного (и если plugins_url filter делает что-то плохое, у вас большие проблемы, лол)

Вам действительно было бы о чем беспокоиться, только если бы вы создавали сообщение с данными, предоставленными пользователем, но использование wp_insert_post() обрабатывает 99,9% всех проблем, с которыми вы столкнулись бы, даже с этим.

Использование Heredoc на самом деле не имеет к этому особого отношения. Heredoc — это, по сути, просто синтаксический вариант для блоков HTML. На самом деле это не большая «проблема» (или ее отсутствие), чем использование строк в двойных кавычках или sprintf() .