文章目录Flask-Talisman给 Flask 应用套一层安全头1、这玩意儿是干嘛的2、默认给你加了什么3、安装和使用4、灵活调整策略5、适合什么场景Flask-Talisman给 Flask 应用套一层安全头flask-talisman 在 GitHub 上有 934 Star。Google 开源了这个扩展专门给 Flask 应用设置 HTTP 安全响应头。它处理的是那些很容易忽略、但确实该做的事强制 HTTPS、设置 CSP、防止点击劫持。1、这玩意儿是干嘛的一句话自动给 Flask 应用的每个响应加上安全相关的 HTTP 头。Web 安全里有一类问题不是代码逻辑漏洞而是配置缺失。站点能被嵌到 iframe 里钓鱼cookie 在不安全连接上被传了出去浏览器把响应内容当成脚本执行。这些问题都可以通过正确的 HTTP 响应头解决但大多数开发者不会逐个去记、去配。Talisman 把这些配置打包成一个扩展初始化一行代码就能全部生效。2、默认给你加了什么Talisman 的默认策略偏严格覆盖了几类常见的安全问题强制 HTTPS 跳转debug 模式除外开启 HSTS让浏览器记住只走 HTTPSsession cookie 标记 secure不会在不安全连接上发送session cookie 标记 httponlyJavaScript 无法读取X-Frame-Options 设为 SAMEORIGIN防止点击劫持X-XSS-Protection 开启过滤X-Content-Type-Options 设为 nosniff防止 MIME 嗅探CSP 策略设为 default-src: ‘self’只加载同源资源Referrer-Policy 设为 strict-origin-when-cross-origin这些设置不需要手动逐个配置Talisman 在初始化后自动处理。3、安装和使用安装pipinstallflask-talisman最简用法fromflaskimportFlaskfromflask_talismanimportTalisman appFlask(__name__)Talisman(app)所有安全头会在每次响应时自动注入。不需要修改视图函数也不需要额外的中间件配置。4、灵活调整策略如果某个视图需要单独放宽策略可以用装饰器覆盖app.route(/embeddable)talisman(frame_optionsALLOW_FROM,frame_options_allow_from*)defembeddable():returnEmbeddable支持按视图覆盖的选项包括 force_https、frame_options 和 content_security_policy。CSP 策略通常需要自定义。默认的同源限制对大多数应用来说太紧需要根据实际资源来源调整csp{default-src:\self\,img-src:*,script-src:userscripts.example.com}talismanTalisman(app,content_security_policycsp)也支持通过环境变量传入 CSP 指令exportCSP_DIRECTIVESdefault-src self; image-src *然后直接读取talismanTalisman(app,content_security_policyos.environ.get(CSP_DIRECTIVES,DEFAULT_CSP_POLICY),)5、适合什么场景刚上线的 Flask 应用安全头还没配不想自己维护一堆安全中间件的项目需要通过安全扫描、但 HTTP 头配置没达标的遗留系统Talisman 不会替你解决所有安全问题。SQL 注入、CSRF 防护这些仍然需要专门的库和编码规范。但它把基础设施层面的安全头配置做到了零成本启动对于大部分 Flask 应用来说这是应该最先做的那件事。man 不会替你解决所有安全问题。SQL 注入、CSRF 防护这些仍然需要专门的库和编码规范。但它把基础设施层面的安全头配置做到了零成本启动对于大部分 Flask 应用来说这是应该最先做的那件事。