CSP,也就是内容安全策略,简单的说就是网站只加载信任的来源内容,就是一种白名单机制,这个是通过设置HTTP 响应头实现的
。
F12 查看响应标头,看到有Content-Security-Policy这个标头,就表明了这个网站启动了内容安全策略(CSP)
。
可以看到百度是启用了内容安全策略(CSP)。
是通过add_header 这个命令,在http标签内添加add_header Content-Security-Policy就可以开启。
http {add_header Content-Security-Policy
}
Content-Security-Policy里面有很多设置参数,这里介绍几个主要的设置参数,来加载指定来源的内容。
浏览器加载页面时,它会同时加载许多其他资源,如样式,字体,JS脚本,一般浏览器会按照页面的源代码加载所有内容。因为它无法判断是否应该加载这些文件中的资源。如果攻击者在评论提交了了一个特制的评论,以从第三方域加载一些恶意 JS,浏览器无法知道这些来自外部链接的资源是恶意的,也就是常见的跨站点脚本(XSS)。 这就是 CSP 的用武之地。
有几个常见参数设置:
default-src 'self'
:表示默认情况下,只允许加载来自同一个网站的内容。
script-src ‘self’ https://trusted.example.com:表示只允许加载来自同一个网站或者https://trusted.example.com的JavaScript脚本。
相类似还有
img-src
style-src
img-src
connect-src
frame-ancestors
上面截图的百度的Content-Security-Policy就启用了frame-ancestors
完整的命令可以参考以下:
http {add_header Content-Security-Policy "default-src 'self';script-src 'self' https://trusted.example.com;object-src 'none';img-src * blob: *;connect-src *;";
}