前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >深入理解内容安全策略(CSP):保障网页安全的利器

深入理解内容安全策略(CSP):保障网页安全的利器

原创
作者头像
泯泷、
发布2025-01-27 11:21:33
发布2025-01-27 11:21:33
1870
举报

在当今的网络环境中,安全问题始终是重中之重。内容安全策略(CSP)作为一个额外的安全层,为我们抵御多种网络攻击提供了有效的手段。

一、CSP 的作用与兼容性

CSP 主要用于检测并削弱特定类型的攻击,像跨站脚本(XSS)和数据注入攻击等。这些攻击是数据盗取、网站内容污染和恶意软件分发的主要途径。

CSP 具有良好的向后兼容性。不支持 CSP 的浏览器与实现了 CSP 的服务器能正常工作,不支持的浏览器会忽略 CSP,按照标准的同源策略处理网页内容。若网站不提供 CSP 标头,浏览器同样使用标准同源策略。不过要使CSP 可用,需要配置网络服务器返回 Content-Security-Policy HTTP 标头(旧版本的 X-Content-Security -Policy 标头已无需使用),也可以使用 <meta> 元素来配置策略,但某些功能(如发送 CSP 违规报告)只有使用 HTTP 标头时才可用。

A CSP broken into its directives.
A CSP broken into its directives.

二、CSP 缓解的攻击类型

(一)跨站脚本攻击(XSS)

XSS 攻击利用了浏览器对服务器获取内容的信任。恶意脚本能在受害者浏览器中运行,因为浏览器信任其内容来源。CSP 通过指定有效域,即浏览器认可的可执行脚本的有效来源,让服务器管理者有能力减少或消除 XSS 攻击的载体。CSP 兼容的浏览器只会执行从白名单域获取的脚本文件,可忽略内联脚本和 HTML 事件处理属性,甚至站点也可以选择全面禁止脚本执行。

(二)数据包嗅探攻击

除限制内容加载域,服务器还能指明允许使用的协议。例如从安全角度出发,服务器可指定所有内容必须通过 HTTPS 加载,完整的数据安全传输策略还包括为所有 cookie 标记 secure 标识,以及提供自动重定向使 HTTP 页面导向 HTTPS 版本,还可以使用 Strict-Transport-Security HTTP 标头确保浏览器只使用加密通道。

三、CSP 策略的制定与编写

(一)制定策略

通过 Content-Security-Policy HTTP 标头指定策略,策略参数是包含各种 CSP 策略指令的字符串。

(二)编写策略

策略由一系列策略指令组成,每个指令针对特定资源类型和策略生效范围。策略应包含 default - src 策略指令,在其他资源类型无符合策略时应用。为防止内联脚本运行和杜绝 eval()的使用,可以包含 default - src 或者 script - src 指令;限制 <style> 元素或者 style 属性的内联样式可包含 default - src 或 style - src 指令。不同类型的项目(如字体、frame、图像等)都有各自特定的指令。

CSP diagram showing source expressions
CSP diagram showing source expressions

四、常见用例示例

(一)仅允许来自站点同一源(不包括子域名)的所有内容

代码语言:http
复制
Content-Security-Policy: default-src 'self'

(二)允许内容来自信任域名及其子域名

代码语言:http
复制
Content-Security-Policy: default-src 'self' *.trusted.com

(三)允许网页应用用户在自己内容中包含任意来源图片,但限制音频、视频来源并指定脚本来源

代码语言:http
复制
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

(四)线上银行网站确保所有内容通过 SSL 方式从特定域名获取

代码语言:http
复制
Content-Security-Policy: default-src https://onlinebanking.jumbobank.com

(五)在线邮箱允许邮件包含 HTML、任意来源图片,但不允许加载 JavaScript 等危险内容

代码语言:http
复制
Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *

五、CSP 策略的测试

(一)仅报告(report - only)模式

CSP 可部署为仅报告模式来降低部署成本。在此模式下,CSP 策略不强制,但违规行为会报告给指定 URI 地址。可以用 Content-Security-Policy-Report-Only HTTP 标头指定策略。若 Content-Security-Policy-Report-Only 标头和 Content-Security-Policy 同时出现,前者策略仅产生报告不强制,后者策略具有强制性。

(二)启用报告

默认不发送违规报告,要启用需指定 report - to 策略指令并提供至少一个 URI 地址递交报告,同时要设置服务器接收、存储和处理报告。

代码语言:http
复制
Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi

六、违规报告

(一)违规报告语法

报告 CSP 违规行为的推荐方法是使用报告 API,在中声明端点并使用标头的指令Reporting-Endpoints将其中一个端点指定为 CSP 报告目标。Content-Security-Policyreport-to

当发生 CSP 违规时,浏览器会通过 HTTP 操作将报告作为 JSON 对象发送到指定端点POST,其值为Content-Typeapplication/reports+json报告是Report对象的序列化形式,其中包含type值为 的属性"csp-violation",以及body为 的对象的序列化形式CSPViolationReportBody

disposition

document-uri

  • 发生违规的文档的 URI。

original-policy

  • Content-Security-Policy HTTP 标头指定的原始策略值。

status-code

  • 全局对象被实例化的资源的 HTTP 状态代码。

(二)违规报告案例

代码语言:JSON
复制
{
  "age": 53531,
  "body": {
    "blockedURL": "inline",
    "columnNumber": 39,
    "disposition": "enforce",
    "documentURL": "https://example.com/csp-report",
    "effectiveDirective": "script-src-elem",
    "lineNumber": 121,
    "originalPolicy": "default-src 'self'; report-to csp-endpoint-name",
    "referrer": "https://www.google.com/",
    "sample": "console.log(\"lo\")",
    "sourceFile": "https://example.com/csp-report",
    "statusCode": 200
  },
  "type": "csp-violation",
  "url": "https://example.com/csp-report",
  "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
}

你需要设置一个服务器来接收具有给定 JSON 格式和内容类型的报告。处理这些请求的服务器随后可以以最适合您需求的方式存储或处理传入的报告。

七、浏览器兼容性

在某些版本的 Safari 浏览器中存在特殊不兼容性,设置内容安全策略标头但未设置相同来源(Same Origin)标头时,会阻止自托管内容和站外内容并报错。

总之,CSP 是保障网页安全的重要技术,合理制定和运用 CSP 策略能够有效提升网页的安全性,抵御多种网络攻击。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、CSP 的作用与兼容性
  • 二、CSP 缓解的攻击类型
  • 三、CSP 策略的制定与编写
  • 四、常见用例示例
  • 五、CSP 策略的测试
  • 六、违规报告
  • 七、浏览器兼容性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档