PHP 8ПровереноПрактика

Как обработать POST-форму: метод, CSRF, валидация и PRG

Безопасный обработчик разделяет получение данных, проверку CSRF, нормализацию, валидацию, предметное действие и Post/Redirect/Get.

if ($_SERVER['REQUEST_METHOD'] !== 'POST') { ... }

Граница запроса

Сначала разрешите только POST, ограничьте Content-Type и общий размер тела на уровне веб-сервера и PHP. Не считайте наличие ключа доказательством корректности.

CSRF до изменения

<?php
$token = (string) ($_POST['csrf'] ?? '');
if (!hash_equals($_SESSION['csrf'], $token)) {
    http_response_code(403);
    exit;
}

Валидация

Нормализуйте каждое поле по его контракту. Email проверяйте как email, идентификатор — как ограниченное целое, выбранное значение — по allowlist.

Вывод ошибок

Возвращайте понятные сообщения без отражения необработанного HTML. При повторном выводе значения применяйте контекстное экранирование.

Успешный сценарий

После изменения состояния применяйте redirect с кодом 303. Это предотвращает повторную отправку формы при обновлении страницы.

Секреты и журнал

Не пишите пароль, CSRF-токен и полный POST в лог. Журналируйте тип результата и безопасный идентификатор операции.

Связанные материалы

Источники и проверка

  • PHP Documentation Group — структурный источник, без внешней ссылки
  • PHP Documentation Group — структурный источник, без внешней ссылки

Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie