Стоил ли экранировать вывод Contact Form 7?

Ссылка скопирована
1 ответ

Стоил ли экранировать вывод 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?

Стоил ли экранировать вывод Contact Form 7?

Если Вы под "экранировать" понимаете санитайзинг (Sanitize), то да. Лишний слой безопасности, который не зависит от конкретного плагина - хуже не сделает (если написан не криво).

Стоил ли экранировать вывод Contact Form 7?

Стоил ли экранировать вывод Contact Form 7

Интересно, как Вы себе представляете "экранирование" html-формы, вставляемой в html страницы через шорткод?

если злоумышленнику удастся попасть в админку сайта?

А если еще и с правами админа, то всякие "экранирования" будут что мертвому припарки.

IMHO не стоит тратить время и силы на ерунду.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Если речь о выводе формы Contact Form 7 через shortcode на фронте, дополнительно оборачивать весь результат в wp_kses() обычно не нужно. CF7 сам генерирует HTML формы, а WordPress уже проверяет права пользователя, который редактирует форму в админке.

Но важно понимать границы безопасности. Если злоумышленник получил доступ администратора, он и так может изменить тему, поставить плагин, добавить JS, поменять форму, создать пользователя. В этом случае экранирование вывода CF7 не является полноценной защитой. Нужно защищать доступ к админке, а не пытаться фильтровать админский HTML на фронте.

Если форму редактируют не администраторы, а пользователи с ограниченными ролями, тогда вопрос серьёзнее. Им не стоит давать право управлять CF7 без понимания последствий. Лучше ограничить роли и capabilities, чем фильтровать готовую форму.

Вывод shortcode обычно выглядит так:

echo do_shortcode('[contact-form-7 id="123" title="Форма"]');

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

$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 формы.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно