#html #python-3.x #flask #csrf-token
#HTML #python-3.x #flask #csrf-токен
Вопрос:
У меня есть простое веб-приложение, и я хочу добавить защиту от csrf. Но я не понял оболочку csrf, предоставленную Flask-WTF. Я уже видел документы. Но все еще не понял, как это работает.
Мои вопросы:
(1) Нужно ли мне после завершения приложения обрабатывать его с маршрута? Или flask позаботится об этом для меня?
(2) Если нет, то как справиться с этим самостоятельно? (Пожалуйста, приведите пример).
Примечание: я не хочу использовать формы wtf, я хотел использовать пользовательские теги для ввода.
app.py :
from flask import Flask, render_template
from flask_wtf.csrf import CSRFProtect
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
csrf = CSRFProtect(app)
@app.route('/', methods=['GET'])
def get_home():
"""Get home template"""
return render_template('home.html')
@app.route('/', methods=['POST'])
def post_home():
"""Handle posted data and do stuff"""
return
home.html (форма):
<form action="#" method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<input type="text" placeholder="Name">
<button type="submit">
Submit
</button>
</form>
Ответ №1:
По умолчанию вам не нужно беспокоиться о проверке этого самостоятельно — вы просто обрабатываете другие поля запроса POST в обычном режиме. Если вы посмотрите на функцию здесь, csrf_protect()
внутри init_app
функции CSRFProtect
класса (строки 202-225, https://github.com/lepture/flask-wtf/blob/master/flask_wtf/csrf.py ), вы можете просмотреть вещи, которые остановят protect()
запуск функции перед заданным запросом.