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),
)

README区域截图

5、适合什么场景

  • 刚上线的 Flask 应用,安全头还没配
  • 不想自己维护一堆安全中间件的项目
  • 需要通过安全扫描、但 HTTP 头配置没达标的遗留系统

Talisman 不会替你解决所有安全问题。SQL 注入、CSRF 防护这些仍然需要专门的库和编码规范。但它把基础设施层面的安全头配置做到了零成本启动,对于大部分 Flask 应用来说,这是应该最先做的那件事。

man 不会替你解决所有安全问题。SQL 注入、CSRF 防护这些仍然需要专门的库和编码规范。但它把基础设施层面的安全头配置做到了零成本启动,对于大部分 Flask 应用来说,这是应该最先做的那件事。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐