非常简单,“足够好”的csrf实现用于flask表单,不需要服务器端会话。
flask-simple-csrf的Python项目详细描述
安装
pip3 install flask-simple-csrf
或者从源代码安装
python3 setup.py install
如何使用
此软件包旨在为每个用户会话提交的每个表单分配一个唯一的CSRF字符串,而不需要任何后端会话跟踪。首先,您需要将app config中的一个变量SECRET_CSRF_KEY
设置为一个随机的复杂字符串。示例:SECRET_CSRF_KEY = 'wMmeltW4mhwidorQRli6Oxx9VPXldz'
第二,您可能希望在代码的顶部添加以下内容:
from flask_simple_csrf import CSRF
#app.config should have an attribute that looks something like this
#CSRF_CONFIG = {
# 'SECRET_CSRF_KEY': 'changeme-40-50-characters-long',
#}
CSRF = CSRF(config=config.CSRF_CONFIG)
app = CSRF.init_app(app)
@app.before_request
def before_request():
if 'CSRF_TOKEN' not in session or 'USER_CSRF' not in session:
session['USER_CSRF'] = random_string(64)
session['CSRF_TOKEN'] = CSRF.create(session['USER_CSRF'])
每个用户会话应该有一个唯一的CSRF字符串,该字符串在表单提交时更改。在
在要保护的HTML模板中,添加:{{ csrf_html(session['USER_CSRF'])|safe }}
这将创建如下内容:<input type="hidden" value="9D..." name="simplecsrf">
我建议在检查这个值时创建一个包装器以避免代码重复。比如:
^{pr2}$然后在需要检查的每个烧瓶视图之前使用@require csrf装饰器。在
- 项目
标签: