Как добавить csrf в приложение flask без wtforms?

#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() запуск функции перед заданным запросом.