Flask anti CSRF

摘要:Flask anti CSRF


最近写了几个Web页面,Python框架一般是可以天生防止Xss和Mysql injection,但是CSRF则需要自己手工实现防止。

下面是自己测试的一个用于防止CSRF的案例(flask框架):

from flask import Flask,request,render_template,session
from random import Random

app = Flask(__name__)
app.debug = True
app.secret_key = "test"

def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str

def generate_csrf_token():
    if '_csrf_token' not in session:
        session['_csrf_token'] = random_str()
    return session['_csrf_token']

@app.before_request
def csrf_protect():
    if request.method == "POST":
        token = session.pop('_csrf_token', None)
        if not token or token != request.form.get('_csrf_token'):
            abort(403)
    app.jinja_env.globals['csrf_token'] = generate_csrf_token()

@app.route("/")
def hello():
    return render_template("index.html")

if __name__ == "__main__":
    app.run()

------------------------------

文章的授权使用CC BY-ND2.5协议。凡是标示“转载”的文章,均来源于网络并尽可能标注作者。如果有侵犯您的权益,请及时联系删除或者署名、授权。


Gtalk/Email: cmd4shell  [at]  gmail.com