研发安全 | 如何用好内容安全策略(CSP)?

2024-08-14 179 0

随着XSS、点击劫持和跨站数据泄露漏洞的日益增多,我们需要采取更深层次的纵深防御安全策略。即将防御措施抽离出来,做好默认安全配置,今天说一下CSP,即内容安全策略,通过服务器端注入内容安全策略(Content-Security-Policy,简称 CSP)头,浏览器能够帮助用户降低很多风险。

CSP本质

CSP 的实质就是白名单制度,开发人员明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置(契合默认安全的原则)。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,同时内部安全运营团队通过态势感知、CSP报告机制能够及时发现攻击并处理,降低被攻击成功的风险,当然如果是攻防演练,还控制了一台列入了白名单的可信主机,这个时候可能就会失效。

CSP主要配置指令

  1. default-src:
    1. 定义了大多数资源的默认源。
  2. script-src:
    1. 指定了允许加载和执行的脚本的源。
  3. style-src:
    1. 指定了允许加载和应用的样式表的源。
  4. img-src:
    1. 指定了允许加载的图像的源。
  5. font-src:
    1. 指定了允许加载的字体的源。
  6. media-src:
    1. 指定了允许加载的媒体资源(如视频和音频)的源。
  7. object-src:
    1. 指定了允许加载的插件(如 Flash)的源。
  8. frame-src:
    1. 指定了允许在 iframe 中加载的资源的源。
  9. child-src:
    1. 指定了允许作为子资源加载的源。
  10. connect-src:
    1. 指定了允许进行网络连接(如 AJAX 请求)的源。
  11. form-action:
    1. 指定了表单提交的允许目标源。
  12. frame-ancestors:
    1. 指定了允许嵌入当前页面的祖先页面的源。
  13. manifest-src:
    1. 指定了允许加载的 Web 应用程序清单的源。
  14. worker-src:
    1. 指定了允许加载的 Web Workers 的源。
  15. base-uri:
    1. 指定了页面中 <base>标签的允许源。
  16. plugin-types:
    1. 指定了允许加载的插件类型。
  17. sandbox:
    1. 为页面提供了一个安全的沙箱环境,可以限制脚本、表单提交等行为。
  18. navigate-to:
    1. 指定了允许页面导航到的源。
  19. prefetch-src:
    1. 指定了允许预加载的资源的源。
  20. report-uri:
    1. 指定了 CSP 违规报告发送到的 URI。
  21. report-to:
    1. 指定了 CSP 违规报告发送到的报告端点的名称。
  22. upgrade-insecure-requests:
    1. 指示浏览器将所有 HTTP 请求升级为 HTTPS 请求。
  23. block-all-mixed-content:
    1. 阻止所有混合内容(即在 HTTPS 页面上加载的 HTTP 资源)。
  24. referrer:
    1. 控制发送到请求中的 Referer 头部。
  25. policy-uri:
    1. 提供了一个指向当前策略的 URI,供浏览器在需要时获取。

这些指令可以组合使用,以创建一个全面的 CSP 策略。接下来再聊聊CSP的使用:

(1)在HTTP Header上使用,这个是首选,在header头里加一些配置:

http头信息的字段

"Content-Security-Policy:" 策略

"Content-Security-Policy-Report-Only:" 策略

(2) 在HTML上使用

<meta http-equiv="content-security-policy"content="策略"> <metahttp-equiv="content-securitu-policy-report-only" content="策略">

Meta标签与HTTP头只是形式不同,但是作用是一致的,如果HTTP头与Meta定义同时存在,则优先采用HTTP中的定义。

如果用户浏览器已经为当前文档执行了一个CSP的策略,则会跳过Meta的定义,如果meta标签缺少content属性也同样会跳过。

CSP样例:

// 限制所有的外部资源,都只能从当前域名加载

Content-Security-Policy: default-src 'self'

// default-src 是CSP 指令,多个指令之间用英文分号分割;多个指令值用英文空格分割

Content-Security-Policy: default-src https://host1.com https://host2.com;frame-src 'none'; object-src 'none'

// 错误写法,第二个指令将会被忽略

Content-Security-Policy: script-src https://host1.com; script-srchttps://host2.com

// 正确写法如下

Content-Security-Policy: script-src https://host1.com https://host2.com

// 通过report-uri指令指示浏览器发送JSON格式的拦截报告到某个地址

Content-Security-Policy: default-src 'self'; ...; report-uri/my_amazing_csp_report_parser;

CSP自查表:

指令

指令样例

指令说明

指令值示例

指令值说明

default-src

default-src 'self';

定义大多数资源的默认允许源

'self', https://example.com

'self'表示同源;具体域名表示允许加载资源的域名

script-src

script-src 'self' https://cdn.com;

指定允许加载和执行脚本的源

'self', https://trusted.cdn.com

允许的脚本资源来源

style-src

style-src 'self' 'unsafe-inline';


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论