wordpress #security
#wordpress #Безопасность
Вопрос:
Нужно ли экранировать атрибуты шорткода в WordPress, если это введенные пользователем данные?
Этот плагин предлагает принимать unsanitized из пользовательского ввода и передавать его через шорткод. https://connekthq.com/plugins/ajax-load-more/extensions/relevanssi /
Конечно, это должно быть очищено, как в моем примере ниже?
Я пишу, чтобы думать, что это должно быть очищено, и является ли мой метод рекомендуемым способом?
$term = (isset($_GET['search'])) ? $_GET['search'] : '';
echo do_shortcode('[ajax_load_more id="relevanssi" search="'. esc_html($term) .'"]');
Ответ №1:
Я бы удвоил и очистил URL-параметр, используя sanitize_key
и экранируя его, как вы уже сделали, но используя esc_attr
, а не esc_html
:
$term = ( isset($_GET['search'])) ? sanitize_key( $_GET['search'] ) : '';
echo do_shortcode('[ajax_load_more id="relevanssi" search="'. esc_attr($term) .'"]');
Кроме того, было бы предпочтительнее использовать ajax_load_more
функцию напрямую, а не do_shortcode.
Ответ №2:
Поскольку вы собираетесь экранировать вводимые пользователем данные, я хотел бы предложить использовать функцию sanitize_text_field(), которую рекомендуется использовать для очистки данных поля ввода пользователя. Если я собираюсь переписать ваш пример кода, то это будет похоже
$term = (isset($_GET['search'])) ? sanitize_text_field($_GET['search']) : '';
echo do_shortcode('[ajax_load_more id="relevanssi" search="'. esc_html($term) .'"]');