CSP 简介
安全策略(Content Security Policy,简称CSP)是一种以可信白名单为基础的机制,用于限制网站可以包含的资源类型和来源,从而缓解广泛的内容注入漏洞,CSP允许我们规定网站只接受指定的请求资源,从而减少恶意代码注入的风险。CSP 使用方式
CSP可以通过两种方式指定:HTTP Header和HTML Meta标签。
HTTP Header:通过在HTTP响应头中添加ContentSecurityPolicy
字段来定义策略集。
```http
ContentSecurityPolicy: defaultsrc 'self'; scriptsrc 'self' https://apis.google.com;
```
HTML Meta标签:通过在HTML文件中的<meta>
标签内定义CSP策略。
```html
<meta httpequiv="contentsecuritypolicy" content="defaultsrc 'self'; scriptsrc 'self' https://apis.google.com">
```
如果同时使用HTTP头和Meta标签定义了CSP,则优先采用HTTP头的定义。
CSP 语法
每条CSP策略由指令和指令值组成,多个策略之间用分号隔开。
ContentSecurityPolicy: defaultsrc 'self'; scriptsrc 'self' https://apis.google.com; stylesrc 'self' https://fonts.googleapis.com;
常见CSP指令
指令 | 说明 |
defaultsrc | 设置所有资源的默认加载策略 |
scriptsrc | 设置JavaScript资源的加载策略 |
stylesrc | 设置CSS样式表的加载策略 |
imgsrc | 设置图片资源的加载策略 |
fontsrc | 设置字体资源的加载策略 |
mediasrc | 设置音频、视频资源的加载策略 |
connectsrc | 设置Ajax和WebSocket等请求的加载策略 |
framesrc | 设置框架内容的加载策略 |
sandbox | 设置沙箱属性 |
reporturi | 指定违反CSP策略时提交报告的地址 |
formaction | 设置表单提交的加载策略 |
referrer | 设置Referrer策略 |
指令值
指令值 | 说明 |
| 允许加载任何内容 |
'none' | 不允许加载任何内容 |
'self' | 允许加载相同源的内容 |
https://a.com | 允许加载指定域名的资源 |
data: | 允许加载data协议的资源,如base64编码的图片 |
'unsafeinline' | 允许加载内联资源,如内联脚本和内联样式 |
'unsafeeval' | 允许执行动态生成的JS代码 |
CSP 例子
1、均来自网站的自身域:
```http
ContentSecurityPolicy: defaultsrc 'self'
```
2、都来自网站自身的域和其他子域:
```http
ContentSecurityPolicy: defaultsrc 'self' *.a.com
```
3、网站接受任意域的图像,但指定域的音频、视频和脚本:
```http
ContentSecurityPolicy: defaultsrc 'self'; imgsrc *; mediasrc a.com; scriptsrc a.com b.com
```
CSP 默认特性
CSP除了使用白名单机制外,还默认阻止内联代码的执行,以防止内容注入攻击,这包括:
阻止内联事件处理器,如onclick
阻止内联样式,如<div style="display:none"></div>
阻止eval()、new Function()、setTimeout(string, …)和setInterval(string, …)等函数。
FAQs
1、什么是XSS攻击?
XSS(CrossSite Scripting)攻击是指攻击者向网页中注入恶意脚本,从而在用户浏览网页时执行这些脚本,窃取用户数据或进行其他恶意操作,CSP通过设置白名单机制,可以有效防止XSS攻击。
2、如何配置CSP来允许内联脚本?
尽管CSP默认阻止内联脚本,但可以通过使用'unsafeinline'
指令值来允许内联脚本,不过,为了安全起见,应尽量避免使用该指令值,除非确实需要。
HTML5安全介绍之内容安全策略(CSP)简介
随着互联网的快速发展,网络安全问题日益突出,HTML5作为新一代的Web标准,提供了许多增强Web应用安全性的特性,内容安全策略(Content Security Policy,CSP)是HTML5中的一项重要安全特性,旨在防止跨站脚本攻击(XSS)等常见安全漏洞。
CSP基本概念
安全策略(CSP)是一种安全机制,它允许网站管理员指定哪些内容资源可以加载和执行,通过这种方式,CSP可以有效地防止恶意脚本注入和其他代码注入攻击。CSP工作原理
CSP通过在HTTP头部中添加ContentSecurityPolicy
字段来实现,浏览器在解析页面时会检查这个头部,并根据其中的规则来决定是否加载或执行某些资源。
以下是CSP的一些关键规则:
defaultsrc
:指定哪些源可以加载资源,如脚本、图片等。
scriptsrc
:指定哪些源可以执行脚本。
imgsrc
:指定哪些源可以加载图片。
stylesrc
:指定哪些源可以加载CSS样式。
fontsrc
:指定哪些源可以加载字体。
frameancestors
:指定哪些页面可以嵌入当前页面。
blockallmixedcontent
:阻止混合内容(即HTTPS页面中加载HTTP资源)。
baseuri
、formaction
、sandbox
等:其他用于增强安全的规则。
CSP的优势
1、防止XSS攻击:通过限制脚本来源,CSP可以阻止恶意脚本注入。
2、减少点击劫持:通过限制页面可以嵌入的源,CSP可以减少点击劫持的风险。
3、提高安全性:CSP可以作为一种额外的安全层,帮助保护网站免受各种攻击。
CSP的配置
配置CSP需要根据网站的具体需求来设置相应的规则,以下是一个简单的CSP配置示例:
ContentSecurityPolicy: defaultsrc 'self'; scriptsrc 'self' https://apis.example.com; imgsrc 'self' https://images.example.com;
这个配置意味着:
只允许从当前源('self')加载资源。
允许从当前源和https://apis.example.com
加载脚本。
允许从当前源和https://images.example.com
加载图片。
CSP的实施
实施CSP时,需要注意以下几点:
1、逐步实施:首先在开发环境中测试CSP,然后逐步在生产环境中实施。
2、错误处理:CSP配置错误可能导致页面无法正常加载,因此需要妥善处理错误。
3、更新维护:定期检查和更新CSP配置,以适应新的安全威胁。
安全策略(CSP)是HTML5提供的一项重要安全特性,它通过限制资源加载和执行,有效防止了多种安全漏洞,合理配置和使用CSP,可以显著提高网站的安全性。