![Скрипт на Эволюцию Брейнрот Без Ключа [АВТО ФАРМ]](https://joyverse.ru/wp-content/uploads/2025/10/image-83-150x150.webp)
Основы защиты от CSRF-атак: примеры на языках программирования

CSRF (Cross-Site Request Forgery) — одна из самых опасных атак на веб-приложения. Она направлена на выполнение нежелательных действий от имени пользователя без его ведома. В этой статье вы узнаете:
- Что такое CSRF и как она работает.
- Чем угрожает CSRF вашему приложению.
- Как защититься от CSRF-атак на примерах с использованием разных языков программирования.
Что такое CSRF?
CSRF — это атака, при которой злоумышленник заставляет пользователя отправить запрос на сервер без его ведома. Этот запрос выглядит легитимным, так как содержит пользовательские сессии или токены авторизации.
Пример атаки:
- Пользователь авторизован в интернет-банке.
- Злоумышленник отправляет пользователю ссылку на поддельный сайт.
- Поддельный сайт выполняет запрос на перевод денег, используя сессию пользователя.
Результат — сервер принимает запрос как действие пользователя и выполняет его.
Чем опасны CSRF-атаки?
CSRF-атаки могут:
- Переводить деньги без согласия пользователя.
- Изменять пароли.
- Удалять данные или менять настройки аккаунтов.
Как защититься от CSRF-атак?
Основные способы защиты:
- Использование CSRF-токенов.
- Проверка Referer-заголовка.
- Ограничение запросов только на определенные HTTP-методы (POST, PUT, DELETE).
Давайте разберем эти способы с примерами на разных языках.
1. Использование CSRF-токенов
PHP (Laravel)
Laravel автоматически защищает формы от CSRF-атак с помощью встроенных токенов.
Пример кода
// HTML-форма с CSRF-токеном
<form method="POST" action="/transfer">
@csrf
<input type="text" name="amount" placeholder="Сумма">
<button type="submit">Отправить</button>
</form>
Laravel автоматически проверяет токены через middleware VerifyCsrfToken
. Если токен отсутствует или неверен, запрос будет отклонен.
Django (Python)
В Django также есть встроенная защита.
Пример кода
# views.py
from django.shortcuts import render
from django.views.decorators.csrf import csrf_protect
@csrf_protect
def transfer_view(request):
if request.method == 'POST':
# Обработка формы
pass
return render(request, 'transfer.html')
В шаблоне нужно добавить токен
<form method="POST" action="/transfer">
{% csrf_token %}
<input type="text" name="amount" placeholder="Сумма">
<button type="submit">Отправить</button>
</form>
Node.js (Express)
Для защиты можно использовать пакет csurf.
Пример кода
const express = require('express');
const csurf = require('csurf');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
// Middleware для CSRF-защиты
const csrfProtection = csurf();
app.use(csrfProtection);
app.get('/form', (req, res) => {
res.send(`
<form method="POST" action="/transfer">
<input type="hidden" name="_csrf" value="${req.csrfToken()}">
<input type="text" name="amount" placeholder="Сумма">
<button type="submit">Отправить</button>
</form>
`);
});
app.post('/transfer', (req, res) => {
res.send('Токен успешно проверен!');
});
2. Проверка Referer-заголовка
Некоторые серверы проверяют Referer, чтобы убедиться, что запрос отправлен с доверенного домена.
Python (Flask)
from flask import request, abort
@app.route('/transfer', methods=['POST'])
def transfer():
referer = request.headers.get('Referer')
if not referer or 'yourdomain.com' not in referer:
abort(403) # Запрос отклонен
# Обработка запроса
return 'Успешно!'
Этот метод прост, но Referer
-заголовок может быть отключен в браузере или изменен злоумышленником.
3. Ограничение запросов на определенные HTTP-методы
Для выполнения критически важных операций лучше использовать только POST, PUT или DELETE.
Пример конфигурации Nginx
location /transfer {
limit_except POST {
deny all;
}
}
Таким образом, только POST-запросы будут обрабатываться сервером.
Заключение
CSRF-атаки представляют серьезную угрозу безопасности вашего веб-приложения. Чтобы защититься:
- Всегда используйте CSRF-токены.
- Проверяйте заголовки запросов.
- Ограничивайте запросы на критически важные действия.
Эти меры помогут минимизировать риски и сохранить безопасность данных ваших пользователей.
Пример для старта: Если вы используете фреймворк вроде Laravel или Django, встроенные инструменты уже обеспечивают защиту от CSRF. Просто не забывайте включать их и тестировать свои приложения!