Введение
Advanced Custom Fields — это плагин для WordPress, который позволяет легко хранить пользовательские данные, связанные с типами данных WordPress, такими как записи, страницы, пользователи, таксономии и т. д.
Эти дополнительные данные хранятся в базе данных либо в связанных таблицах метаданных, либо в таблице опций WordPress, в зависимости от места, где отображается группа полей ACF.
ACF использует стандартные возможности WordPress для чтения и записи в таблицы базы данных, поэтому он напрямую наследует большую часть безопасности и совместимости ядра WordPress.
Соображения безопасности
По умолчанию данные, хранящиеся внутри ACF, не видны публично. Исключение составляет случай, когда группа полей или отдельные поля становятся доступными через REST API.
Исторически шорткод ACF позволял получать доступ к любому значению поля ACF в любом месте. Это означало, что любой пользователь, имеющий доступ к публикации записей на вашем сайте, мог получить доступ к любому полю, если знал его имя. Начиная с ACF 6.3.0 шорткод ACF был по умолчанию отключен в ACF 6.3.0 для новых установок ACF. В ACF 6.3.4 также были введены ограничения доступа, чтобы пользователи не могли получать значения полей ACF в непубличных записях.
В версии 6.3.6 ACF была представлена новая модель безопасности для доступа к полям: доступ редакторов к полям через шорткод ACF или привязки блоков управляется новым переключателем на вкладке «Представление» каждого поля. Для любых полей, созданных до 6.3.6, это значение установлено в true, чтобы сохранить прежнее поведение, но для всех новых полей, созданных после 6.3.6, оно будет установлено в false.
Если пользователь попытается получить доступ к полю, для которого не включено «Разрешить доступ к значению в интерфейсе редактора», вывод будет пустым, но при предварительном просмотре записи будет показано сообщение об ошибке, объясняющее, почему значение не будет отображаться.
Мы рекомендуем отключать доступ через интерфейс редактора для всех полей, если только не предполагается, что редакторы контента смогут получать значение поля через шорткод ACF или привязки блоков, особенно если это поле содержит информацию, которая должна быть защищенной, например ключи доступа или другие секретные сведения.
Установка
ACF — это стандартный плагин WordPress, который можно установить как обычный плагин или как обязательный плагин.
При установке нет особых соображений безопасности, и следует применять обычные правила и разрешения для плагинов WordPress. Пользователям, которые устанавливают ACF впервые, следует выполнить шаги, описанные здесь.
Обеспечение доступа к обновлениям безопасности имеет решающее значение. В ACF реализован альтернативный механизм обновления, как описано здесь. Этот процесс следует выполнить для каждого сайта WordPress, где установлена бесплатная версия ACF. После этого обновления плагина должны обычным образом отображаться в админке WordPress.
Безопасный вывод данных ACF
ACF будет пытаться использовать возможность unfiltered_html, чтобы гарантировать, что только администраторы могут сохранять потенциально небезопасный HTML, но пользователи уровня Contributor и выше могут обойти эту защиту с помощью других предоставляемых WordPress способов обновления метаданных записи. По этой причине очень важно экранировать значения полей и при выводе.
Многие пользователи используют ACF для хранения потенциально небезопасного HTML, например iframes или тегов script, поэтому по умолчанию ACF не выполняет никакого экранирования при использовании get_field(). Следовательно, при использовании get_field или get_sub_field пользователи должны экранировать поля при выводе в шаблоне или теме.
Мы предоставляем функцию acf_esc_html, которая поможет это сделать; ей нужно передать строку, которая будет пропущена через систему WordPress kses. В качестве альтернативы можно использовать любую другую функцию экранирования, например wp_kses_post или wp_kses напрямую, либо другие варианты экранирования PHP.
По возможности мы рекомендуем так форматировать поля и тему, чтобы в значениях полей ACF хранился ограниченный HTML, который затем будет отображаться вашей темой. Например, вместо того чтобы хранить в значениях полей целый HTML-тег ссылки и затем выводить его в теме, можно хранить в значении поля URL ссылки, а в теме использовать более специфичную функцию esc_url() для его экранирования:
$link = ‘<a href=”’ . esc_url( get_field( ‘your_link_url_field’ ) ); . ‘“>текст ссылки</a>`
До ACF 6.2.7 функции the_field и the_sub_field тоже не выполняли экранирование, но у пользователей не было возможности экранировать значения с помощью этих функций. Начиная с ACF 6.2.7, эти функции автоматически обрабатывают экранирование с помощью acf_esc_html.
Начиная с ACF 6.2.5, вывод шорткода ACF также по умолчанию экранируется.
Обновлено: 01.06.2026