摘要: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