В современном мире создание и поддержка веб-сайтов становится все более популярным занятием. WordPress, как одна из самых распространенных платформ для создания сайтов, предлагает различные инструменты для удобной работы с контентом. Одним из таких инструментов является шорткод ACF (Advanced Custom Fields), который позволяет добавлять дополнительные поля к постам, страницам и другим типам записей. В этом блог-посте мы рассмотрим, что такое шорткод acf и как работает экранирование HTML-кода в WordPress.
Что такое шорткод ACF?
Шорткод ACF — это инструмент в WordPress, который позволяет создавать дополнительные поля для контента. С помощью ACF вы можете легко добавлять текстовые поля, изображения, файлы, чекбоксы и другие типы данных к вашим записям. Это отличный способ сделать ваш сайт более гибким и настроить его под конкретные потребности.
Основное преимущество шорткода ACF заключается в том, что он позволяет добавлять дополнительные данные к вашему контенту без необходимости вмешательства в код темы или плагина. Вы можете легко создавать и управлять дополнительными полями прямо из административной панели WordPress, что делает процесс настройки сайта более удобным и эффективным.
Как работает экранирование HTML-кода в WordPress?
Экранирование HTML-кода — это процесс защиты вашего сайта от вредоносных атак и нежелательного вывода HTML-разметки на странице. В WordPress экранирование HTML-кода осуществляется с помощью различных функций, которые очищают данные от потенциально опасных элементов и обеспечивают безопасное отображение контента.
WordPress имеет встроенную функцию экранирования HTML-кода под названием wp_kses. Эта функция фильтрует содержимое и удаляет любые нежелательные HTML-теги или атрибуты, что помогает предотвратить XSS-атаки и другие уязвимости. Использование функции wp_kses является важным шагом для обеспечения безопасности вашего сайта и защиты пользователей от потенциальных угроз.
Что такое функция экранирования HTML-кода WordPress wp_kses?
Функция wp_kses в WordPress представляет собой мощный инструмент для фильтрации и очистки HTML-кода от потенциально опасных элементов. Она позволяет определить разрешенные теги, атрибуты и стили, которые могут быть использованы в контенте, и автоматически удаляет все остальное.
Преимущества использования функции wp_kses очевидны: она обеспечивает безопасность вашего сайта, защищая его от различных видов атак, таких как внедрение скриптов или SQL-инъекции. Кроме того, wp_kses помогает поддерживать чистоту кода и предотвращает возможные проблемы с отображением контента на странице.
Как использовать шорткод ACF для вывода поля ACF?
Для использования шорткода ACF для вывода поля ACF на странице необходимо выполнить несколько простых шагов. Сначала вам нужно создать дополнительное поле с помощью плагина Advanced Custom Fields и присвоить ему уникальный ключ. Затем вы можете использовать этот ключ в шорткоде ACF для вывода значения поля на странице.
Пример использования шорткода ACF для вывода текстового поля:
Где «название_поля» — это ключ созданного дополнительного поля. После размещения данного шорткода на странице будет выведено значение соответствующего поля ACF. Таким образом, вы можете легко интегрировать дополнительные данные на свой сайт с помощью шорткода ACF.
Какие преимущества дает использование функции экранирования HTML-кода WordPress wp_kses?
Использование функции экранирования HTML-кода WordPress wp_kses обеспечивает ряд значительных преимуществ для вашего сайта. Во-первых, она защищает ваш контент от возможных атак и обеспечивает безопасность пользователей при взаимодействии с сайтом. Во-вторых, wp_kses помогает поддерживать структуру кода и предотвращает возможные ошибки при отображении контента.
Еще одним преимуществом использования функции wp_kses является возможность настройки разрешенных тегов и атрибутов в соответствии с требованиями вашего сайта. Это позволяет гибко управлять тем, какой контент может быть отображен на странице, и предотвращает нежелательное форматирование или исполнение скриптов.
Какие типы данных поддерживает шорткод ACF?
Шорткод ACF поддерживает различные типы данных, что делает его универсальным инструментом для работы с контентом на вашем сайте. Среди поддерживаемых типов данных можно выделить текстовые поля, изображения, файлы, чекбоксы, выпадающие списки, даты и многое другое.
Благодаря такому разнообразию типов данных вы можете легко создавать разнообразный контент на своем сайте без необходимости писать сложный код или использовать дополнительные плагины. Шорткод ACF предоставляет удобный интерфейс для добавления и управления дополнительными полями, что делает процесс создания контента более эффективным и приятным.
Как изменить настройки экранирования HTML-кода WordPress wp_kses?
Для изменения настроек экранирования HTML-кода WordPress wp_kses необходимо использовать специальные функции фильтрации данных перед выводом на страницу. Вы можете определить список разрешенных тегов и атрибутов с помощью функций add_filter() или apply_filters(), чтобы настроить поведение wp_kses под свои нужды.
Пример изменения настроек wp_kses для разрешения определенных тегов:
```php
function custom_wp_kses_allowed_tags($tags) {
$tags['iframe'] = array(
'src' => true,
'width' => true,
'height' => true
);
return $tags;
}
add_filter('wp_kses_allowed_html', 'custom_wp_kses_allowed_tags');
```
Начиная с версии ACF 6.2.5, использование шорткода ACF для вывода поля ACF будет экранироваться функцией экранирования HTML-кода WordPress wp_kses.
Это изменение может стать критическим, если вы используете короткий код () для вывода потенциально небезопасного HTML-кода, такого как скрипты или фреймы iframes для полей textarea или WYSIWYG.
В ACF серьезно относятся к безопасности, но также учитываем влияние исправлений безопасности на ваши сайты. Чтобы помочь владельцам сайтов, на которые повлиял этот выпуск, определить, какие поля затронуты, плагин будет отображать уведомление на экранах администратора WordPress, предупреждая вас всякий раз, когда какие-либо выходные данные были экранированы этим изменением.
Начиная с версии ACF 6.2.7, ожидаемой в феврале 2024 года, экранирование небезопасного HTML также будет применяться к другим функциям, где ACF обрабатывает вывод значения поля, а именно к функциям the_field()
и the_sub_field()
. Чтобы помочь предвидеть последствия этого будущего изменения, мы также добавили уведомление в ACF 6.2.5, предупреждающее вас о том, что ваш сайт выводит HTML, который будет изменен при экранировании в версии 6.2.7.
Это исправление необходимо из-за уязвимости, при которой пользователи на вашем сайте с ролью contributor или выше, у которых нет unfiltered_html
разрешения, обычно зарезервированного за администраторами, могут вручную установить значение пользовательского элемента meta за пределами ACF, чтобы он содержал вредоносный HTML. Из-за vector наша обычная очистка действия сохранения применяться не будет. Затем они могут использовать шорткод ACF для вывода этого HTML-кода небезопасным способом.
ACF 6.2.5 обнаружит, когда небезопасный HTML был удален из значения поля, выводимого шорткодом ACF. В окне администратора WordPress отобразится сообщение об ошибке со списком полей, на которые повлияло это изменение, что поможет вам определить, где вам может потребоваться внести исправления.
Предстоящие изменения в the_field()
При тестировании вышеуказанного изменения для устранения уязвимости мы поняли, что можем предпринять дополнительные действия для повышения безопасности, когда ACF обрабатывает выходные данные поля. В частности, функции the_field()
и the_sub_field()
также должны быть по умолчанию безопасны для HTML.
Хотя мы знаем, что многие пользователи хранят HTML в полях, которые они хотят отобразить во внешнем интерфейсе, поскольку эти функции не позволяют пользователям самостоятельно применять какие-либо экранирования, мы считаем своей ответственностью обеспечить безопасность любого вывода из них.
Начиная с версии ACF 6.2.5, начинает определять, когда экранированное значение отличается от текущего выходного значения, что указывает на то, что что-то удаляется из значения поля. Список затронутых полей и способ их вывода отображаются в виде сообщения в окне администратора WordPress. Это сообщение видно каждому пользователю вашего admin, но подробные сведения о названиях полей и функциях видны только пользователям, имеющим возможность использовать экраны администратора ACF.
В ACF 6.2.7, выпуск которого в настоящее время ожидается в конце февраля 2024 года, изменяется поведение, чтобы удалять небезопасный HTML по умолчанию, когда the_field()
или the_sub_field()
, показывая ошибку администратора WordPress, когда это произошло.
Для ясности, не удаляется the_field()
или the_sub_field()
, гарантируется что по умолчанию он может выводить только безопасный HTML.
Запрещенные HTML-теги
По умолчанию большая часть HTML считается безопасной. Такие вещи, как изображения или таблицы, не представляют риска, и поэтому система WordPress kses, которая обеспечивает такое экранирование, разрешает это по умолчанию. Удаляются только те HTML-файлы, которые могут быть использованы в вредоносных целях, такие как <script>
теги или <iframe>
tags, и это дополнительно настраивается.
Список разрешенных HTML и атрибутов виден в исходном коде WordPress и включает большинство HTML-элементов, за исключением iframes и скриптов, которые могут заставить браузер запускать сторонний код.
Условное отключение нового поведения
Если вы доверяете своим пользователям роль участника или выше, можно использовать один из двух новых фильтров, чтобы отключить это автоматическое экранирование, вернув значение true . Вам следует ограничить фильтр определенными ключами полей, используя доступные дополнительные параметры.
acf/shortcode/allow_unsafe_html отключит экранирование для шорткода.
acf/the_field/allow_unsafe_html отключит экранирование при использовании the_field.
Фильтры предоставляют различные аргументы, если вы хотите разрешить небезопасный HTML для определенного типа поля, на определенной странице или для определенного имени поля или ключа.
Фильтр шорткодов предоставляет вам тип поля и полный массив атрибутов, переданных в шорткоде, вместе с полным объектом поля, если таковой имеется:
apply_filters( 'acf/shortcode/allow_unsafe_html', false, $attributes, $field_type, $field_object )
Например, если вы используете для вывода iframe, вы могли бы использовать следующий код, чтобы разрешить этому полю выводить потенциально небезопасный HTML (iframe)
add_filter( 'acf/shortcode/allow_unsafe_html', function ( $allowed, $atts ) {
if ( $atts['field'] === 'podcast_iframe' ) {
return true;
}
return $allowed;
}, 10, 2 );
Фильтр для the_field()
(и the_sub_field()
) предоставляет вам селектор полей, предоставленный функции вывода, идентификатор записи (если указан) и тип поля. Он также предоставляет вам объект field, который будет содержать ключ поля (но может иметь значение false, если ACF не смог найти ссылку на поле).
apply_filters( 'acf/the_field/allow_unsafe_html', false, $selector, $post_id, $field_type, $field_object )
Например, если у вас есть поле с именем, google_maps_iframe
которое содержит iframe
карту Google, следующий код позволит по-прежнему выводить его с помощью the_field
:
add_filter( 'acf/the_field/allow_unsafe_html', function( $allowed, $selector ) {
if ( $selector === "google_maps_iframe" ) {
return true;
}
return $allowed;
}, 10, 2);
Включите новое поведение как можно раньше
Если вы не используете ACF для хранения небезопасного HTML-кода или уверены, что уже безопасно экранируете свои выходные данные там, где это необходимо, вы можете выбрать новое поведение прямо сейчас, используя новый acf/the_field/escape_html_optin
фильтр:
add_filter( 'acf/the_field/escape_html_optin', '__return_true' );
Это позволит немедленно удалить небезопасный HTML и сообщить об ошибке администратору WordPress, когда это произойдет.