Ответ
CSRF (Cross-Site Request Forgery) токен — это уникальный, секретный и непредсказуемый ключ, который сервер генерирует для каждого пользовательского сеанса. Он добавляется в формы или запросы, требующие аутентификации, чтобы защитить от подделки межсайтовых запросов.
Как это работает:
- Сервер генерирует токен и привязывает к сессии пользователя
- Токен встраивается в форму как скрытое поле (
<input type="hidden" name="_csrf" value="токен">
) - При отправке формы сервер проверяет соответствие токена в запросе и сессии
Пример в Express.js:
const csrf = require('csurf');
const csrfProtection = csrf({ cookie: true });
app.get('/form', csrfProtection, (req, res) => {
res.render('form', { csrfToken: req.csrfToken() });
});
app.post('/process', csrfProtection, (req, res) => {
// Запрос будет отклонен, если токен неверен
});
В форме:
<form action="/process" method="POST">
<input type="hidden" name="_csrf" value="{{csrfToken}}">
<!-- остальные поля формы -->
</form>