CSRF Token: что это?
CSRF (Cross-Site Request Forgery) token - это защитный механизм, который используется для предотвращения атак CSRF. Атака CSRF возникает, когда злоумышленник пытается выполнить неавторизованные действия от имени пользователя, профинансированного на целевом веб-сайте.
CSRF токен является уникальным случайным значением, которое генерируется и связывается с каждым пользовательским запросом на сервер. Этот токен включается в каждый запрос, отправляемый на сервер, и проверяется для проверки подлинности запроса.
Пример кода на серверной стороне:
python
from flask import Flask, render_template, request, session
import secrets
app = Flask(__name__)
app.secret_key = 'your_secret_key'
@app.route('/')
def index():
# Генерация CSRF токена
csrf_token = secrets.token_hex(16)
session['csrf_token'] = csrf_token
return render_template('index.html', csrf_token=csrf_token)
@app.route('/submit', methods=['POST'])
def submit():
# Получаем CSRF токен из сессии
saved_csrf_token = session.pop('csrf_token', None)
# Проверяем CSRF токен из формы с сохраненным
if saved_csrf_token != request.form.get('csrf_token'):
return 'Invalid CSRF token!'
# Действия, выполняемые при отправке формы
return 'Form submitted successfully!'
if __name__ == '__main__':
app.run()
Пример кода на клиентской стороне:
html
В приведенном примере при загрузке страницы создается CSRF токен и сохраняется в сессии пользователя. Затем токен вставляется в скрытое поле формы на клиентской стороне. Когда форма отправляется на сервер, контроллер проверяет, соответствует ли токен, отправленный с формой, токену, сохраненному в сессии. Если токены совпадают, форма считается действительной, и сервер может выполнить требуемые действия. Если токены не совпадают, сервер обрабатывает это как попытку атаки CSRF и может прервать выполнение запроса.
Таким образом, использование CSRF токенов является эффективным механизмом защиты от атак CSRF и помогает обеспечить безопасность веб-приложения.