HTML5安全:内容安全策略(CSP)简介

本文介绍了HTML5中的内容安全策略(CSP),一种用于防御XSS攻击的安全防御机制。CSP通过设置HTTP头定义来源白名单,限制浏览器执行和渲染的资源,有效防范恶意注入的脚本。此外,文章还讨论了CSP的多种指令,如script-src、font-src等,以及如何在实际场景中应用CSP,保护Web应用的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:HTML5出现后,网络安全更加受到广泛的关注。Web对于网络安全有哪些改进?我们如何来面对越来越危险的网络欺诈和攻击?下面的文章谈到了W3C对于这个问题的最新解决方案。未来有机会的话,我会针对XSS、P3P、同源策略、CORS(跨域资源共享)和CSP进行关于HTML5内容安全的现场分享。

------------------------华丽的分界线

注意:本文所讨论的API还未最终确定,请在自己的项目中谨慎使用。

万维网的安全策略植根于同源策略。例如http://blog.youkuaiyun.com/hfahe的代码只能访问http://blog.youkuaiyun.com的数据,而没有访问http://www.baidu.com的权限。每个来源都与网络的其它部分分隔开,为开发人员构建了一个安全的沙箱。理论上这是完美的,但是现在攻击者已经找到了聪明的方式来破坏这个系统。

这就是XSS跨站脚本攻击,通过虚假内容和诱骗点击来绕过同源策略。这是一个很大的问题,如果攻击者成功注入代码,有相当多的用户数据会被泄漏。

现在我们介绍一个全新的、有效的安全防御策略来减轻这种风险,这就是内容安全策略(ContentSecurity Policy,CSP)。

来源白名单

XSS攻击的核心是利用了浏览器无法区分脚本是被第三方注入的,还是真的是你应用程序的一部分。例如Google +1按钮会从https://apis.google.com/js/plusone.js加载并执行代码,但是我们不能指望从浏览器上的图片就能判断出代码是真的来自apis.google.com,还是来自apis.evil.example.com。浏览器下载并执行任意代码的页面请求,而不论其来源。


CSP定义了Content-Security-PolicyHTTP头来允许你创建一个可信来源的白名单,使得浏览器只执行和渲染来自这些来源的资源,而不是盲目信任服务器提供的所有内容。即使攻击者可以找到漏洞来注入脚本,但是因为来源不包含在白名单里,因此将不会被执行。

以上面Google +1按钮为例,因为我们相信apis.google.com提供有效的代码,以及我们自己,所以可以定义一个策略,允许浏览器只会执行下面两个来源之一的脚本。

Content-Security-Policy:script-src 'self' https://apis.google.com

是不是很简单?script-src可以为指定页面控制脚本相关权限。这样浏览器只会下载和执行来自http://apis.google.com和本页自身的脚本。

一旦我们定义了这个策略,浏览器会在检测到注入代码时抛出一个错误(请注意是什么浏览器)。

内容安全策略适用于所有常用资源

虽然脚本资源是最明显的安全隐患,但是CSP还提供了一套丰富的指令集,允许页面控制加载各种类型的资源,例如如下的类型:

  • content-src:限制连接的类型(例如XHR、WebSockets和EventSource)
  • font-src:控制网络字体的来源。例如可以通过font-src https://themes.googleusercontent.com来使用Google的网络字体。
  • frame-src:列出了可以嵌入的frame的来源。例如frame-srchttps://youtube.com只允许嵌入YouTube的视频。。
  • img-src:定义了可加载图像的来源。
  • media-src:限制视频和音频的来源。
  • object-src:限制Flash和其他插件的来源。
  • style-src:类似于Script-src,只是作用于css文件。

默认情况下,所有的设置都是打开的,不做任何限制。你可以以分号分隔多个指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值