#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()
.