Защита от CSRF: что это такое и как работает атака межсайтовой подделки запросов
CSRF, или Cross-Site Request Forgery (межсайтовая подделка запросов), - это вид атак на веб-приложения, при котором злоумышленник может выполнить нежелательные действия от имени пользователя без его согласия или даже знания. Например, мошенник может отправить запрос на выполнение денежного перевода с банковского счета пользователя на свой или выполнить другие вредоносные действия.
Для защиты от CSRF-атак, веб-приложения должны использовать специальный механизм защиты, называемый токенами CSRF. Токен CSRF - это случайная строка, которая генерируется на стороне сервера и отправляется вместе с формой на клиентскую сторону. При отправке формы, клиент должен отправить и токен CSRF, и только в этом случае сервер допустит выполнение запроса.
Вот пример кода на Python, демонстрирующий простую защиту от CSRF-атак:
python
from flask import Flask, render_template, request, session
import secrets
app = Flask(__name__)
app.secret_key = secrets.token_hex(16)
@app.route('/')
def index():
token = secrets.token_hex(16)
session['csrf_token'] = token
return render_template('index.html', csrf_token=token)
@app.route('/submit', methods=['POST'])
def submit():
if request.form['csrf_token'] == session.pop('csrf_token', None):
# CSRF-токены совпадают, обрабатываем запрос
# ...
return 'OK'
else:
# CSRF-токены не совпадают, возможна атака
return 'CSRF Error', 403
if __name__ == '__main__':
app.run(debug=True)
В этом примере при загрузке страницы генерируется CSRF-токен и сохраняется в сессии пользователя. Этот токен затем передается в шаблон HTML, где он содержится в скрытом поле формы. При отправке формы, клиент отправляет и CSRF-токен, и другие данные. На стороне сервера происходит проверка переданного CSRF-токена с сохраненным в сессии. Если они совпадают, то запрос проходит дальше и обрабатывается. Если CSRF-токены не совпадают, то сервер вернет ошибку CSRF.