非常简单,“足够好”的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装饰器。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
HTTP标头的java InputStream未终止   java测试SpringWebListener   具有定义的替换编号Java的regex ReplaceAll   在java中使用contains()方法   java在选择查询中使用JoinColumn字段   具有用户的java Start-stop demon不是以给定用户启动   java glBufferData生成GL\u无效\u操作   java中循环代码的循环   Java位无符号移位(>>>>)会产生奇怪的结果   java HQL使用点分隔符从select获取结果   条纹、弹簧、玩耍(或?):使用哪种高性能Java框架?   广播接收机中的java停止服务   java回收器视图占据整个屏幕。不在上面显示我的UI元素   java使MySQL查询更快   java MappedByteBuffer查询   java递归算法问题