Экранирование введенных пользователем данных — атрибуты шорткода WordPress

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) .'"]');