Стоил ли экранировать вывод Contact Form 7?
Стоил ли экранировать вывод Contact Form 7 функциями типа wp_kses, ведь это насколько я понимаю потенциальная уязвимость, если злоумышленнику удастся попасть в админку сайта?
Update: Прощу прощения, видимо я не совсем точно выразился. Я имел в виду текстовый редактор форм CF7, в который пользователь может вставить любой код, который будет запущен при выводе в теме. Стоит ли его оборачивать в wp_kses?
Например, такой:
<script>alert('hello!');</script> <img src="" onerror="alert('error!');"></img> |
<script>alert('hello!');</script> <img src="" onerror="alert('error!');"></img>
Какой потенциальный вред или для кого-то пользу может такой код нанести думаю не стоит.
Дополнительно:
Ответы:
ведь это насколько я понимаю потенциальная уязвимость, если злоумышленнику удастся попасть в админку сайта?
Каким образом вывод формы позволит попасть в админку?
А сам код всех плагинов из оф каталога проверяется на безопасность. Т.е. CF7 настолько же опасен, как и любой другой плагин.
Так что нет, не стоит заниматься фигнёй.
- Видимо я не так выразился, я имел в виду если злоумышленник попадет в админку, то он сможет воспользоваться редактором форм CF7, в своих нехороших целях. Поэтому хорошо бы при выводе в теме это дело подчистить.
- mikitachyzhyk, если злоумышленник попадет в админку - на кой ему вообще CF7? Получать почту? :) Он сможет более эффективно использовать доступы.
Не морочь голову, займись делом. Чтобы никто не попадал в админку.
- Не согласен с вами, думаю вам стоит больше об этом узнать, перед тем как давать советы, но спасибо за попытку.
- mikitachyzhyk, а, ну если ты умнее, то чего ж спрашиваешь..
С головой попробуй подружиться и подумай - если злоумышленник попадет в админку - о какой безопасности речь? Какая опасность в плагине формы? Как что и где ты собрался "экранировать" в плагине?
Стоил ли экранировать вывод Contact Form 7?
Если Вы под "экранировать" понимаете санитайзинг (Sanitize), то да. Лишний слой безопасности, который не зависит от конкретного плагина - хуже не сделает (если написан не криво).
Стоил ли экранировать вывод Contact Form 7
Интересно, как Вы себе представляете "экранирование" html-формы, вставляемой в html страницы через шорткод?
если злоумышленнику удастся попасть в админку сайта?
А если еще и с правами админа, то всякие "экранирования" будут что мертвому припарки.
IMHO не стоит тратить время и силы на ерунду.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Если речь о выводе формы Contact Form 7 через shortcode на фронте, дополнительно оборачивать весь результат в
wp_kses()обычно не нужно. CF7 сам генерирует HTML формы, а WordPress уже проверяет права пользователя, который редактирует форму в админке.Но важно понимать границы безопасности. Если злоумышленник получил доступ администратора, он и так может изменить тему, поставить плагин, добавить JS, поменять форму, создать пользователя. В этом случае экранирование вывода CF7 не является полноценной защитой. Нужно защищать доступ к админке, а не пытаться фильтровать админский HTML на фронте.
Если форму редактируют не администраторы, а пользователи с ограниченными ролями, тогда вопрос серьёзнее. Им не стоит давать право управлять CF7 без понимания последствий. Лучше ограничить роли и capabilities, чем фильтровать готовую форму.
Вывод shortcode обычно выглядит так:
echo do_shortcode('[contact-form-7 id="123" title="Форма"]');
Если shortcode ID приходит из пользовательского ввода, экранировать нужно не HTML формы, а сам ID:
$form_id = absint($_GET['form_id'] ?? 0); if ($form_id) { echo do_shortcode('[contact-form-7 id="' . $form_id . '"]'); }
Если Вы вручную выводите значения полей, которые отправил пользователь, там экранирование обязательно:
esc_html()для текста,esc_attr()для атрибутов,esc_url()для ссылок,wp_kses_post()для ограниченного HTML.Фильтровать весь HTML формы через
wp_kses()может сломать CF7: удалятся служебные атрибуты, hidden-поля, data-атрибуты, reCAPTCHA, acceptance, quiz и JS-интеграции. Поэтому делать это “на всякий случай” не стоит.Практический вывод: если CF7 редактируют только администраторы, выводите форму штатно. Если боитесь взлома админки — включайте 2FA, обновления, ограничение доступа, аудит пользователей. Если данные приходят от посетителей — экранируйте их при выводе, но не ломайте сам HTML формы.