flask-talisman:给 Flask 应用套上一层 HTTP 安全头

flask-talisman:给 Flask 应用套上一层 HTTP 安全头 文章目录flask-talisman给 Flask 应用套上一层 HTTP 安全头1、它解决什么问题2、安装和使用3、可调整的选项4、适用场景flask-talisman给 Flask 应用套上一层 HTTP 安全头flask-talisman 在 GitHub 上有 934 Star由 Google Cloud Platform 维护。这是一个 Flask 扩展作用很直接自动设置 HTTP 安全响应头减少几种常见 Web 攻击的风险面。1、它解决什么问题Web 应用的安全问题里相当一部分可以通过正确的 HTTP 响应头来缓解。点击劫持依赖 X-Frame-Options 来防御XSS 攻击可以通过 Content Security Policy 限制脚本来源会话劫持则可以用 secure 和 httponly 的 cookie 属性来降低概率。手动在每个路由里配置这些头部既重复又容易遗漏。flask-talisman 把这套配置做成了一个 Flask 扩展一行代码就能启用一套相对完整的安全头部策略。默认启用的事项包括强制 HTTPS 连接非调试模式下自动把 HTTP 请求重定向到 HTTPS启用 HSTS让浏览器在指定时间内记住只用 HTTPS 访问该域名把 session cookie 标记为 secure避免明文 HTTP 传输时被截获把 session cookie 标记为 httponly阻止 JavaScript 通过 document.cookie 读取设置 X-Frame-Options 为 SAMEORIGIN降低点击劫持的风险设置 X-Content-Type-Options 为 nosniff阻止浏览器猜测响应内容类型设置严格的 Content Security Policy默认只允许加载同源资源设置 Referrer-Policy 为 strict-origin-when-cross-origin控制跨站请求时携带的 referrer 信息2、安装和使用安装依赖pip install flask-talisman引入并包裹 Flask 应用即可生效fromflaskimportFlaskfromflask_talismanimportTalisman appFlask(__name__)Talisman(app)完成这一步后应用的所有响应都会自动带上默认的安全头部。3、可调整的选项扩展提供了大量配置项。force_https 控制是否强制跳转 HTTPSforce_https_permanent 可以把跳转状态码从 302 改为 301frame_options 支持 SAMEORIGIN、DENY 或 ALLOW_FROM 三种取值strict_transport_security 系列选项控制 HSTS 的详细行为。Content Security Policy 是多数项目需要重点自定义的部分。默认策略非常严格只允许加载同源资源实际业务中通常需要放宽。扩展内置了一个 GOOGLE_CSP_POLICY 作为参考也支持传入完全自定义的字典csp{default-src:self,img-src:*,media-src:[media1.com,media2.com],script-src:userscripts.example.com}talismanTalisman(app,content_security_policycsp)如果某些路由需要特殊策略也可以通过装饰器在视图级别覆盖talisman(frame_optionsALLOW_FROM,frame_options_allow_from*)defembeddable():returnEmbeddable4、适用场景所有对外提供服务的 Flask 应用都可以考虑引入。HTTP 安全头部是 OWASP 推荐的基础防护手段配置成本低收益明确。flask-talisman 把这种配置压缩到了几乎零摩擦的程度开发者不需要逐一手写每个头部的语法也能快速启用。需要提醒的是这个扩展只管头部配置这一环。项目文档也明确建议配合 CSRF 库使用并强调没有银弹完整的 Web 应用安全还需要输入校验、认证授权、漏洞扫描等其他措施配合。头部配置这一环。项目文档也明确建议配合 CSRF 库使用并强调没有银弹完整的 Web 应用安全还需要输入校验、认证授权、漏洞扫描等其他措施配合。