Flask-Talisman:给 Flask 应用套一层安全头
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,让浏览器记住只走 HTTPS
- session cookie 标记 secure,不会在不安全连接上发送
- session cookie 标记 httponly,JavaScript 无法读取
- 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、安装和使用
安装:
pip install flask-talisman
最简用法:
from flask import Flask
from flask_talisman import Talisman
app = Flask(__name__)
Talisman(app)
所有安全头会在每次响应时自动注入。不需要修改视图函数,也不需要额外的中间件配置。
4、灵活调整策略
如果某个视图需要单独放宽策略,可以用装饰器覆盖:
@app.route('/embeddable')
@talisman(frame_options=ALLOW_FROM, frame_options_allow_from='*')
def embeddable():
return 'Embeddable'
支持按视图覆盖的选项包括 force_https、frame_options 和 content_security_policy。
CSP 策略通常需要自定义。默认的同源限制对大多数应用来说太紧,需要根据实际资源来源调整:
csp = {
'default-src': '\'self\'',
'img-src': '*',
'script-src': 'userscripts.example.com'
}
talisman = Talisman(app, content_security_policy=csp)
也支持通过环境变量传入 CSP 指令:
export CSP_DIRECTIVES="default-src 'self'; image-src *"
然后直接读取:
talisman = Talisman(
app,
content_security_policy=os.environ.get("CSP_DIRECTIVES", DEFAULT_CSP_POLICY),
)

5、适合什么场景
- 刚上线的 Flask 应用,安全头还没配
- 不想自己维护一堆安全中间件的项目
- 需要通过安全扫描、但 HTTP 头配置没达标的遗留系统
Talisman 不会替你解决所有安全问题。SQL 注入、CSRF 防护这些仍然需要专门的库和编码规范。但它把基础设施层面的安全头配置做到了零成本启动,对于大部分 Flask 应用来说,这是应该最先做的那件事。
man 不会替你解决所有安全问题。SQL 注入、CSRF 防护这些仍然需要专门的库和编码规范。但它把基础设施层面的安全头配置做到了零成本启动,对于大部分 Flask 应用来说,这是应该最先做的那件事。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)