Вопрос или проблема
Учитывая мое ограниченное знание и опыт в процессе экранирования данных, мне трудно определить, какие функции экранируются, а какие нет. Я стараюсь анализировать раздел «Источник» функций в документации WordPress. Сейчас я знаю об экранирующих функциях, таких как esc_html()
, esc_url()
и др. Но, например, изучая wp_get_attachment_image()
(https://developer.wordpress.org/reference/functions/wp_get_attachment_image/), я не могу найти их в исходном коде (wp-includes/…). Я не знаю, какие экранирующие функции искать, чтобы проверить, было ли оно уже экранировано или нет.
Я узнал, что функции с префиксом the_
(the_title
, the_content
, the_permalink
и др.) уже экранированы. Поэтому я в основном использую их при выводе данных. В нескольких случаях, однако, я использую другие основные функции. Например, для alt-атрибутов, принадлежащих избранным изображениям записей, я использую функцию get_post_meta
: alt="<?php echo esc_html(get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true));?>"
. Очевидно, я экранирую get_post_meta()
с помощью esc_html()
, что выводит значение тега alt, как ожидалось.
Мне также нужно удостовериться, что следующая функция, выводимая с echo, экранируется на выходе, учитывая, что она не использует префикс the_
:
if (has_category()):?>
<?php
$categories = get_the_category();
foreach ($categories as $category):?>
<a class="article-category" href="<?php echo get_category_link($category->term_id);?>">
<?php echo $category->name;?>
</a>
<?php endforeach;?>
<?php endif;?>
Наконец, мне нужно убедиться, что это также экранируется:
<time class="article-time"><?php echo get_the_date();?></time>
ИЗМЕНЕНИЕ: Я экранировал это последнее, сделав: echo esc_html(get_the_date())
Благодарен за любые мысли и предложения.
/dfr
.
Ответ или решение
При оценке того, является ли функция ядра WordPress (или другая) уже заэкранированной, важно последовательно использовать несколько шагов. Особое внимание уделяется стандартам безопасности и качества кода.
Обнаружение неэкранированных данных жизненно важно для предотвращения XSS-атак и обеспечения корректного отображения информации. В представленном вопросе упоминаются примеры функций и подходов, используемых для экранирования данных в WordPress. Ниже приводится метод, который поможет диагностировать экранирование функций:
-
Изучение документации и исходного кода: Начните с просмотра документации WordPress. Для функций, таких как
wp_get_attachment_image()
, стоит найти исходный код вwp-includes
и посмотреть, внутри ли функции вызываются какие-либо методы экранирования, такие какesc_html()
илиesc_url()
. -
Идентификация функций с префиксом
the_
: Как упомянуто в вопросе, функции с префиксомthe_
часто содержат встроенное экранирование. Например,the_title()
автоматически экранирует заголовок. Однако, будьте осторожны с использованиемget_
функций, так как они возвращают "сырые" данные и требуют экранирования вручную. -
Проверка вывода других функций: Рассмотрим используемые в примере функции, такие как
get_post_meta()
иget_the_category()
. Посколькуget_post_meta()
возвращает сырые данные, их экранирование сesc_html()
абсолютно правильно. Дляget_the_category()
, экранирование должно быть применено ко всем выводимым данным, например, к$category->name
, с помощьюesc_html()
илиesc_attr()
, в зависимости от контекста вывода. -
Анализ ссылок и URL: В коде представлены ссылки, создаваемые функцией
get_category_link
. Всегда используйтеesc_url()
для экранирования URL перед их выводом. -
Работа с датами: В дополнение к экранированию текста через
esc_html()
, обеспечьте, чтобы даты также были заэкранированы, как показано в исправленной строке кода сget_the_date()
. -
Использование статических анализаторов кода: Для большей уверенности рассмотрите возможность использования утилит для статического анализа кода, которые могут помочь автоматически выявлять неэкранированные данные в проекте.
-
Тестирование и проверка безопасности: Регулярно проверяйте веб-сайт на возможные уязвимости, используя инструменты типа WPScan. Такая проактивная защита поможет вовремя обнаружить и устранить проблемы.
Эти шаги помогут убедиться в том, что используемые функции экранированы должным образом, и данные обрабатываются безопасно. Внимательное отношение к этим деталям, наряду с привычкой регулярно обновлять знания о нововведениях в WordPress, обеспечит качество и безопасность вашего кода.