Как обработать 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 — структурный источник, без внешней ссылки
Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.