19.09.25 28 483 просмотров
Привет, фанаты Roblox! Ищешь рабочий и бесплатный скрипт для 99 Ночей в Лесу на ...
CSRF (Cross-Site Request Forgery) — одна из самых опасных атак на веб-приложения. Она направлена на выполнение нежелательных действий от имени пользователя без его ведома. В этой статье вы узнаете:
CSRF — это атака, при которой злоумышленник заставляет пользователя отправить запрос на сервер без его ведома. Этот запрос выглядит легитимным, так как содержит пользовательские сессии или токены авторизации.
Результат — сервер принимает запрос как действие пользователя и выполняет его.
CSRF-атаки могут:
Давайте разберем эти способы с примерами на разных языках.
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 также есть встроенная защита.
# 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>Для защиты можно использовать пакет 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('Токен успешно проверен!');
});Некоторые серверы проверяют Referer, чтобы убедиться, что запрос отправлен с доверенного домена.
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-заголовок может быть отключен в браузере или изменен злоумышленником.
Для выполнения критически важных операций лучше использовать только POST, PUT или DELETE.
location /transfer {
limit_except POST {
deny all;
}
}Таким образом, только POST-запросы будут обрабатываться сервером.
CSRF-атаки представляют серьезную угрозу безопасности вашего веб-приложения. Чтобы защититься:
Эти меры помогут минимизировать риски и сохранить безопасность данных ваших пользователей.
Пример для старта: Если вы используете фреймворк вроде Laravel или Django, встроенные инструменты уже обеспечивают защиту от CSRF. Просто не забывайте включать их и тестировать свои приложения!