Защита от 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.

Похожие вопросы на: "csrf "

Родительский портал: советы и поддержка для успешного воспитания детей
Скачать KB2999226 для Windows 7 x64
c const - основные принципы и применение в программировании
Lerna: Managing JavaScript Projects Made Easy
Ad hoc запросы: эффективный инструмент для анализа ваших данных
Application Octet Stream: определение и использование
Курс PythonPath - изучение языка программирования Python
<h1>Android Fragment
WebSocket Java: основы, примеры и руководство
Шаблоны проектирования Java: лучшие практики и примеры