在 Flask 项目中解决 CSRF 攻击
pip install flask_wtf
在 Flask 中, Flask-wtf 扩展有一套完善的 csrf 防护体系,对于我们开发者来说,使用起来非常简单
# 1. session加密的时候已经配置过了.如果没有在配置项中设置,则如下: app.secret_key = "#此处可以写随机字符串#" # 2. 也可以写在配置类中。 class Config(object): DEBUG = True SECRET_KEY = "dsad32DASSLD*13%^32" """加载配置""" app.config.from_object(Config)
from flask.ext.wtf import CSRFProtect CSRFProtect(app)
<form method="post" action="/"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" /> </form>
视图代码;
from flask import Flask,render_template from settings.dev import Config from flask_script import Manager from flask_wtf.csrf import CSRFProtect # from flask.ext.wtf import CSRFProtect # 低版本的flask直接可以引入 """创建flask应用""" app = Flask(__name__,template_folder='templates') """使用脚手架[终端脚本]启动项目""" manage = Manager(app) """加载配置""" app.config.from_object(Config) """初始化csrf防范机制""" CSRFProtect(app) @app.route("/login",methods=["get"]) def loginform(): return render_template("login.html") @app.route("/dologin",methods=["post"]) def login(): return "ok" if __name__ == '__main__': manage.run()
模板代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="{{ url_for('login') }}" method="post"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> <input type="submit" value="登录"> </form> </body> </html>