Content-Security-Policy 入门必知

CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

两种方法可以启用 CSP。一种是通过 HTTP 头信息的Content-Security-Policy的字段。

 

Header set Content-Security-Policy "script-src 'https:'; object-src 'self'"

另一种是通过网页的<meta>标签。


<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org t

常用指令说明:

指令名

demo

说明

 

default-src

'self' cdn.example.com

默认策略,可以应用于js文件/图片/css/ajax请求等所有访问

不能为self, unsafe-eval, unsafe-inline, data

script-src

'self' js.example.com

定义js文件的过滤策略

不能为self,unsafe-eval, unsafe-inline, data

style-src

'self' css.example.com

定义css文件的过滤策略

 

img-src

'self' img.example.com

定义图片文件的过滤策略

 

connect-src

'self'

定义请求连接文件的过滤策略

 

font-src

font.example.com

定义字体文件的过滤策略

 

object-src

'self'

定义页面插件的过滤策略,如 <object>, <embed> 或者<applet>等元素

 

media-src

media.example.com

定义媒体的过滤策略,如 HTML6的 <audio>, <video>等元素

 

frame-src

'self'

定义加载子frmae的策略

 

sandbox

allow-forms allow-scripts

沙盒模式,会阻止页面弹窗/js执行等,你可以通过添加allow-forms allow-same-origin allow-scripts allow-popups, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-presentation, allow-popups-to-escape-sandbox, and allow-top-navigation 策略来放开相应的操作

 

report-uri

/some-report-uri

 

 

指令值(所有以-src结尾的指令都可以用一下的值来定义过滤规则,多个规则之间可以用空格来隔开)

demo

说明

*

img-src *

允许任意地址的url,但是不包括 blob: filesystem: schemes.

'none'

object-src 'none'

所有地址的咨询都不允许加载

'self'

script-src 'self'

同源策略,即允许同域名同端口下,同协议下的请求

data:

img-src 'self' data:

允许通过data来请求咨询 (比如用Base64 编码过的图片).

domain.example.com

img-src domain.example.com

允许特性的域名请求资源

*.example.com

img-src *.example.com

允许从 example.com下的任意子域名加载资源

https://cdn.com

img-src https://cdn.com

仅仅允许通过https协议来从指定域名下加载资源

https:

img-src https:

只允许通过https协议加载资源

'unsafe-inline'

script-src 'unsafe-inline'

允许行内代码执行

'unsafe-eval'

script-src 'unsafe-eval'

允许不安全的动态代码执行,比如 JavaScript的 eval()方法

详细内容请参考:

https://cloud.tencent.com/developer/section/1189865

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

 

 


版权声明:本文为wy818原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。