资讯动态

django-csp配置完整参考:CONTENT_SECURITY_POLICY字典与default-src等全部指令详解

发布时间:2026/8/26 14:54:18 来源:尧图企业网站定制
django-csp配置完整参考CONTENT_SECURITY_POLICY字典与default-src等全部指令详解【免费下载链接】django-cspContent Security Policy for Django.项目地址: https://gitcode.com/gh_mirrors/dj/django-cspdjango-csp 是专为 Django 项目设计的 Content Security PolicyCSP内容安全策略扩展包通过在每个 HTTP 响应中注入Content-Security-Policy头帮助开发者从源头拦截 XSS 注入、恶意脚本等攻击。本文以 4.0 版本为例详解CONTENT_SECURITY_POLICY配置字典的结构、全部可用指令以及最佳实践帮你在 10 分钟内配出安全又不「翻车」的 CSP 策略。30秒了解 django-csp 的核心原理CSP 是一种浏览器级安全机制服务端声明「哪些来源的脚本、样式、图片、字体、表单请求是合法的」浏览器据此拦截一切非法加载。django-csp 通过中间件 csp/middleware.py 自动为响应添加策略头你只需在 Django 的settings中完成配置。安装只需三步执行pip install django-csp在INSTALLED_APPS中加入csp在MIDDLEWARE中加入csp.middleware.CSPMiddleware完整说明见 docs/installation.rst。CONTENT_SECURITY_POLICY 字典的 3 个顶层键4.0 版本起所有配置集中在一个字典中旧版CSP_DEFAULT_SRC等平铺式配置已废弃from csp.constants import NONE, SELF CONTENT_SECURITY_POLICY { EXCLUDE_URL_PREFIXES: [/excluded-path/], # 可选排除某些路径 REPORT_PERCENTAGE: 100.0, # 可选上报比例 0.0~100.0 DIRECTIVES: { # 核心指令字典 default-src: [SELF, cdn.example.net], frame-ancestors: [SELF], form-action: [SELF], report-uri: /csp-report/, }, }顶层键类型作用DIRECTIVESdict指令集合键是指令名值是来源列表tuple/listEXCLUDE_URL_PREFIXESlist/tuple以这些前缀开头的 URL 不附加 CSP 头REPORT_PERCENTAGEfloat控制report-uri上报的比例用于降低违规报告量⚠️ 官方提醒排除任何路径都会削弱整站的 CSP 防护浏览器安全模型对同源路径「一视同仁」应谨慎使用EXCLUDE_URL_PREFIXES。双策略强制策略 vs 仅上报策略django-csp 同时支持两套策略这是它的招牌能力CONTENT_SECURITY_POLICY—— 强制策略enforceable违规内容会被浏览器直接拦截CONTENT_SECURITY_POLICY_REPORT_ONLY—— 仅上报策略report-only浏览器只上报违规、不拦截。 推荐玩法强制策略保持宽松保证站点可用仅上报策略收紧一档通过report-uri观察「如果强制执行会拦掉什么」逐步向更严格策略演进。default-src 等全部指令详解以下是指令速查表DIRECTIVES字典的键即为这些指令名。 标记的是不继承default-src回退的指令——只配default-src对它们无效必须显式声明。资源获取类指令指令管控对象默认值default-src兜底来源其他指令未定义时回退到这里[self]script-srcJavaScript 脚本含script内联未设置script-src-attr/script-src-elem细粒度拆分onclick等属性 /script元素未设置img-src图片未设置style-src样式表与内联样式未设置style-src-attr/style-src-elem细粒度拆分style属性 /style元素未设置font-src字体文件未设置media-src音频/视频未设置object-srcobject、embed、applet未设置connect-srcfetch、XHR、WebSocket 等连接未设置worker-srcWeb Worker未设置manifest-srcWeb Application Manifest未设置frame-srciframe、frame、plugins内容未设置child-srcobject、插件与嵌套浏览上下文未设置文档与导航类指令指令管控对象默认值frame-ancestors谁能把本站放进 iframe防点击劫持未设置form-action表单可提交的地址未设置base-uribase元素可指向的地址未设置navigate-tolocation.href等导航目标未设置sandbox对违规文档施加沙箱限制未设置上报与安全增强类指令指令说明类型report-uri违规报告上报地址可写相对路径如/csp-report/URI 列表report-to指定报告组配合Reporting-Endpoints头字符串upgrade-insecure-requests自动把http://子资源升级为https://布尔值require-sri-for要求脚本/样式带 SRI 完整性校验值取script/style列表require-trusted-types-for启用 Trusted Types值固定[script]列表trusted-types允许的可信策略名列表列表已废弃但仍可配置block-all-mixed-content、plugin-types、prefetch-src。全部指令的默认值定义在 csp/utils.py 的DEFAULT_DIRECTIVES中完整文档见 docs/configuration.rst。CSP 关键词常量少写引号、少犯错的利器CSP 关键词在策略头中必须带单引号如self、unsafe-inline手写极易漏引号。4.0 起 csp/constants.py 提供了一组常量NONE none # 禁止任何来源 SELF self # 仅允许同源 STRICT_DYNAMIC strict-dynamic UNSAFE_INLINE unsafe-inline UNSAFE_EVAL unsafe-eval UNSAFE_HASHES unsafe-hashes UNSAFE_ALLOW_REDIRECTS unsafe-allow-redirects WASM_UNSAFE_EVAL wasm-unsafe-eval REPORT_SAMPLE report-sample⚠️ 一个高频混淆点NONE常量→ 输出 CSP 关键词none表示「该指令不允许任何来源」NonePython→ 表示「不输出该指令」。配合装饰器可整条移除基础策略中的某个指令例如csp_replace({frame-ancestors: None})。快速上手一份推荐的基线配置from csp.constants import SELF, NONE CONTENT_SECURITY_POLICY { DIRECTIVES: { default-src: [SELF, cdn.example.net], script-src: [SELF], style-src: [SELF], img-src: [SELF, data:], connect-src: [SELF], frame-ancestors: [SELF], form-action: [SELF], report-uri: /csp-report/, upgrade-insecure-requests: True, }, }要点default-src先兜底同源再把 CDN、对象存储等第三方来源精确加到对应指令能不用unsafe-inline就不用有 nonce 方案可用见csp_nonce。进阶按页面微调策略装饰器不是每个页面都该用同一套策略。csp/decorators.py 提供四个装饰器装饰器行为csp(config)用传入指令替换基础策略中同名指令csp_update(config)在基础策略上追加来源csp_replace(config)替换指令值传None可删除该指令csp_exempt()该视图完全豁免CSP 头from csp.decorators import csp_update csp_update({script-src: [app.trusted-cdn.com]}) def third_party_dashboard(request): ...常见配置陷阱清单值必须是列表/元组default-src: self字符串会生成奇怪的策略甚至报错必须写[self]。关键词漏引号self不加引号等于一个普通域名务必用常量SELF。忘记default-src不兜底的指令form-action、frame-ancestors等必须显式配置否则形同虚设。DEBUG 模式行为不同中间件在调试模式下会豁免 500/404 响应的策略头排查问题时注意区分。旧配置未迁移python manage.py check可自动检测旧版CSP_前缀设置并生成新格式模板。总结django-csp 的配置核心就一张字典DIRECTIVES里放指令EXCLUDE_URL_PREFIXES和REPORT_PERCENTAGE管边界与上报再叠加一套 REPORT_ONLY 策略做渐进式收紧。配合装饰器按视图微调即可在「可用性」与「安全性」之间找到平衡点。掌握以上内容你就能为任何 Django 项目写出生产级 CSP 配置。【免费下载链接】django-cspContent Security Policy for Django.项目地址: https://gitcode.com/gh_mirrors/dj/django-csp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价