CSRF token: защита от межсайтовой подделки запроса
```html
<?php
session_start();
// Генерация CSRF токена
function generate_csrf_token() {
if (!isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
}
// Проверка CSRF токена
function validate_csrf_token($token) {
if (!isset($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {
die('Недействительный CSRF токен!');
}
}
// Генерация и вывод формы
function generate_form() {
generate_csrf_token();
echo '<form action="process.php" method="post">';
echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';
echo '<input type="text" name="username" placeholder="Имя пользователя">';
echo '<input type="password" name="password" placeholder="Пароль">';
echo '<input type="submit" value="Войти">';
echo '</form>';
}
// Обработка формы
function process_form() {
validate_csrf_token($_POST['csrf_token']);
// Дополнительная логика обработки формы
}
// Главная логика приложения
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
process_form();
} else {
generate_form();
}
?>
```
В этом примере кода при каждой генерации формы генерируется и сохраняется CSRF токен в пользовательской сессии. При отправке формы, значение CSRF токена добавляется в качестве скрытого поля формы. В функции обработки формы происходит проверка валидности CSRF токена, и только при совпадении токенов разрешается выполнение дополнительной логики обработки формы.
Таким образом, использование CSRF токенов помогает защитить ваше веб-приложение от атак, связанных с межсайтовой подделкой запросов. Этот механизм является одним из важных элементов безопасности веб-приложений и должен быть применен при разработке любого серьезного проекта.