前面讲了X-Frame-Options防点击劫持。还有一个更强大的安全头叫CSP(内容安全策略)。它从根上告诉浏览器:这个网站只能加载我信任的脚本和图片,其他一律拒绝。XSS攻击注入的恶意脚本直接被浏览器拦住。
CSP是什么原理
你在HTTP响应头里加一行Content-Security-Policy,写明规则:
默认所有资源只从自己域名加载。
脚本可以从自己域名和百度统计域名加载。
图片可以从自己域名和CDN域名加载。
其他域名的脚本、图片、iframe一律不加载。
就算黑客在你文章里注入了一段恶意script标签,浏览器一看这脚本不在白名单里,直接不执行。XSS攻击就失效了。
怎么配置
宝塔面板配置文件里加一行:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://hm.baidu.com; img-src 'self' https://你的CDN域名 data:; style-src 'self' 'unsafe-inline';";
注意:百度统计脚本在hm.baidu.com,要加进去。你用了其他第三方服务(在线客服、字体、视频),都要把对应域名加到白名单里。
注意事项
第一,先开报告模式。第一次配CSP别直接强制拦截,先用Content-Security-Policy-Report-Only模式。浏览器只报告哪些资源被拦了,不真拦。你看看报告里有哪些第三方资源漏配了,补全之后再切到强制模式。
第二,配完自己测试。打开网站,F12控制台看有没有CSP报错。有报错说明某个资源被拦了,去白名单里加上。
第三,小站其实X-Frame-Options就够了。CSP配置复杂,配错了网站样式全乱。大站、有用户登录功能的站再上CSP。小站先把基础安全头配好。


