如何在没有wtforms的情况下将CSRF添加到flask应用程序?

问题描述

我有一个简单的网络应用, 而且我想添加csrf保护。但是我不理解Flask-WTF提供的csrf包装器。我已经看过文档了。但是仍然不知道它是如何工作的。

我的问题是:

(1)包装完应用程序后,我是否需要从路线上处理它?还是烧瓶帮我解决这个问题?

(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>

解决方法

默认情况下,您无需担心自己进行验证-您只需正常处理POST请求的其他字段即可。如果您在这里查看d类的StringBuilder函数中的函数public static String encrypt(String word,int shift) { StringBuilder sb = new StringBuilder(); for (char c : word.toCharArray()) { char ch = (char)((Character.toLowerCase(c)-'a' + shift)%26+'a'); if (Character.isUpperCase(c)) { ch = Character.toUpperCase(ch); } sb.append(ch); } return sb.toString(); } (第202-225行,https://github.com/lepture/flask-wtf/blob/master/flask_wtf/csrf.py行),则可以查看将停止运行的内容。 csrf_protect()函数在给定请求之前运行。