Как добавить проверку и очистку входящих данных в WordPress

Работа с входящими данными — одна из важнейших задач при разработке на WordPress. Без правильной проверки и очистки данных ваш сайт становится уязвим к XSS, SQL-инъекциям и другим атакам. В этой статье мы подробно разберём, как добавлять проверку (валидацию) и очистку (санитизацию) входящих данных на разных этапах обработки, используя стандартные функции WordPress и собственные решения.

Почему проверка и очистка данных важны для WordPress

Входящие данные поступают из множества источников: формы, URL-параметры, AJAX-запросы, REST API, куки и т.д. Если не фильтровать и не валидировать эти данные, злоумышленники могут внедрить вредоносный код или нарушить логику работы сайта.

WordPress предлагает встроенные функции для защиты, но разработчик должен грамотно их использовать и дополнять кастомными проверками.

Проверка (валидация) отвечает на вопрос: «Данные корректны и соответствуют ожиданиям?» Очистка (санитизация) — это удаление нежелательных или опасных символов.

Основные функции WordPress для очистки и проверки данных

Для начала рассмотрим самые часто используемые функции:

  • sanitize_text_field() — удаляет HTML, PHP-теги и лишние пробелы из текстовых полей.
  • sanitize_email() — проверяет и очищает email-адрес.
  • sanitize_textarea_field() — для многострочного текста.
  • esc_url_raw() — очищает URL для записи в базу.
  • intval(), floatval() — для чисел.
  • wp_kses() — позволяет задать список разрешённых HTML-тегов и атрибутов.
  • is_email() — проверка валидности email.
  • filter_var() с фильтрами PHP для дополнительной проверки.

Пример простой функции для очистки пользовательского ввода из формы:

function wpset_sanitize_user_input($data) {
    $clean = array();
    $clean['name'] = sanitize_text_field($data['name']);
    $clean['email'] = sanitize_email($data['email']);
    $clean['message'] = sanitize_textarea_field($data['message']);
    return $clean;
}

Добавляем валидацию на сервере: пример для формы обратной связи

Валидация проверяет логику и формат данных. Например, поле email должно содержать корректный email, а возраст — число в определённом диапазоне.

Пример функции с валидацией и возвратом ошибок:

function wpset_validate_contact_form($data) {
    $errors = array();

    if (empty($data['name'])) {
        $errors['name'] = 'Укажите имя';
    }

    if (empty($data['email']) || !is_email($data['email'])) {
        $errors['email'] = 'Введите корректный email';
    }

    if (!empty($data['age']) && (!is_numeric($data['age']) || $data['age'] < 18 || $data['age'] > 100)) {
        $errors['age'] = 'Возраст должен быть числом от 18 до 100';
    }

    if (empty($data['message'])) {
        $errors['message'] = 'Введите сообщение';
    }

    return $errors;
}

В реальной обработке формы сначала вызываем wpset_validate_contact_form(), а затем, если ошибок нет, очищаем данные с помощью функции очистки и записываем их или отправляем.

Использование nonce и проверка прав доступа

Для безопасности форм важно использовать wp_nonce_field() и проверять nonce на сервере через check_admin_referer() или wp_verify_nonce(). Это предотвращает CSRF-атаки.

Пример добавления nonce в форму:

<form method="post" action="">
    <?php wp_nonce_field('wpset_contact_form_action', 'wpset_contact_form_nonce'); ?>
    <input type="text" name="name" />
    <input type="email" name="email" />
    <textarea name="message"></textarea>
    <button type="submit">Отправить</button>
</form>

Проверка nonce в обработчике:

if (!isset($_POST['wpset_contact_form_nonce']) || !wp_verify_nonce($_POST['wpset_contact_form_nonce'], 'wpset_contact_form_action')) {
    wp_die('Ошибка безопасности. Повторите попытку.');
}

Обработка AJAX-запросов с проверкой и очисткой данных

При работе с AJAX нужно всегда проверять nonce и валидировать данные на сервере. Пример обработки AJAX-запроса с проверкой nonce и очисткой:

add_action('wp_ajax_wpset_submit_form', 'wpset_handle_ajax_form');
add_action('wp_ajax_nopriv_wpset_submit_form', 'wpset_handle_ajax_form');

function wpset_handle_ajax_form() {
    check_ajax_referer('wpset_ajax_nonce', 'nonce');

    $data = array(
        'name' => sanitize_text_field($_POST['name']),
        'email' => sanitize_email($_POST['email']),
        'message' => sanitize_textarea_field($_POST['message']),
    );

    $errors = wpset_validate_contact_form($data);
    if (!empty($errors)) {
        wp_send_json_error(array('errors' => $errors));
    }

    // Здесь логика сохранения или отправки данных

    wp_send_json_success(array('message' => 'Форма успешно отправлена'));
}

Использование плагина Clearfy Pro для улучшения безопасности и очистки данных

Плагин Clearfy Pro предлагает расширенные возможности для безопасности, оптимизации и очистки кода сайта. Он помогает отключать ненужные REST API endpoint’ы, очищать ненужные данные и добавлять дополнительные уровни защиты.

Использование Clearfy в связке с собственными функциями очистки позволяет максимально снизить риски уязвимостей.

Как создать универсальную функцию очистки и проверки для разных типов данных

Часто полезно иметь одну функцию, которая по типу поля будет подбирать нужный фильтр. Пример универсальной функции:

function wpset_sanitize_and_validate($field, $value) {
    switch ($field) {
        case 'email':
            $value = sanitize_email($value);
            if (!is_email($value)) return false;
            break;
        case 'url':
            $value = esc_url_raw($value);
            break;
        case 'int':
            $value = intval($value);
            break;
        case 'text':
            $value = sanitize_text_field($value);
            break;
        case 'textarea':
            $value = sanitize_textarea_field($value);
            break;
        default:
            $value = sanitize_text_field($value);
    }
    return $value;
}

Такую функцию удобно использовать при обработке массивов с данными.

Резюме: лучшие практики работы с входящими данными в WordPress

  • Всегда очищайте данные перед сохранением или выводом.
  • Проверяйте корректность формата и логики данных.
  • Используйте nonce для защиты форм и AJAX-запросов.
  • Применяйте универсальные функции для снижения дублирования кода.
  • Используйте стандартные функции WordPress, дополняя их кастомными проверками.
  • Рассмотрите применение плагинов безопасности, таких как Clearfy Pro, для дополнительной защиты.

Соблюдая эти рекомендации, вы значительно повысите безопасность и стабильность вашего WordPress-сайта, а также упростите поддержку и развитие кода.

Реактивный фильтрованный вывод постов в WordPress с AJAX
20.03.2026
Как защитить WordPress от bruteforce атак с помощью кода
21.02.2026
Как добавить собственные метаполя в WordPress
24.01.2026
Как установить и настроить OmniVideo в WordPress
27.01.2026
Как создать автоматический импорт данных из Google Sheets в WordPress
09.02.2026