варианты проверок для форм, включая CSRF-токены и капчу, а также другие методы защиты и валидации.
1. CSRF-токен (защита от межсайтовой подделки запроса)
Как работает?
<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<form method="POST">
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
<!-- Остальные поля формы -->
</form>
<!-- проверка на сервере -->
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("Ошибка CSRF-токена!");
}
Защищает от атак, когда злоумышленник пытается отправить форму с другого сайта.
Обязательно использовать для важных действий (логин, платежи, изменение данных).
Капча (защита от ботов)
Как работает?
<?php
session_start();
$a = rand(1, 10);
$b = rand(1, 10);
$_SESSION['captcha_answer'] = $a + $b;
?>
<form method="POST">
<p>Сколько будет <?= $a ?> + <?= $b ?>?</p>
<input type="text" name="captcha" required>
</form>
<!-- проверка на сервере -->
if ($_POST['captcha'] != $_SESSION['captcha_answer']) {
die("Неправильная капча!");
}
3. Другие полезные проверки для форм
a) Валидация email
b) Проверка длины пароля
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
die("Некорректный email!");
}
c) Защита от XSS (очистка ввода)
if (strlen($_POST['password']) < 8) {
die("Пароль должен быть не менее 8 символов!");
}
d) Проверка загружаемых файлов
$clean_input = htmlspecialchars($_POST['comment'], ENT_QUOTES, 'UTF-8');
e) Ограничение частоты отправки форм (защита от флуда)
$allowed_types = ['image/jpeg', 'image/png'];
if (!in_array($_FILES['file']['type'], $allowed_types)) {
die("Можно загружать только JPEG и PNG!");
}
if ($_SESSION['last_form_submit'] && (time() - $_SESSION['last_form_submit'] < 10)) {
die("Слишком часто! Подождите 10 секунд.");
}
$_SESSION['last_form_submit'] = time();
Комментарии