参考资料: https://infosec.mozilla.org/guidelines/web_security#content-security-policy
这是我主页的CSP设置, CSP的设置可以有效防止XSS. 如需使用, 只要替换或添加自己需要的域名即可~
1 2 3 4 5 6 7
| <meta http-equiv="Content-Security-Policy" content="img-src 'self' image.torch-fan.site img1.imgtp.com; script-src 'unsafe-inline' 'self' lib.baomitu.com at.alicdn.com; style-src 'self' 'unsafe-inline' at.alicdn.com lib.baomitu.com; media-src 'self' blob:; worker-src 'self' blob:; object-src 'self' ">
|
但是, 可以看到script-src
中有unsafe-inline
, 这仍然不是非常安全, 因此可以去掉, 然后添加script的hash值(不用担心不知道, 浏览器的console中会打印被屏蔽的javascript脚本的hash值, 复制粘贴即可):
1 2 3 4 5 6 7
| <meta http-equiv="Content-Security-Policy" content="img-src 'self' imagebed.torch-fan.site img1.imgtp.com; script-src 'self' lib.baomitu.com at.alicdn.com 'sha256-u0AitIxF7N0hYtvjq/jQbABXtOYAsJnJeCFoRizdaDM=' 'sha256-cPZda3lIu6/tDfdRIA6fN74jCn3QXC9sg4vsBi+VW6w=' 'sha256-gX0IeNsFB1Hts7cNk8JTGzzl9RcNAI+59T2fVUJBw1I='; style-src 'self' at.alicdn.com lib.baomitu.com 'sha256-quaYMDAFArRHzQDsZzJMSjqcQCtz+UUgFIbN2a8TIQc=' 'sha256-NK4ORibhZQrqK59KJ1o+jAxvEYk2UPVOV0Wgggbfaek='; media-src 'self' blob:; worker-src 'self' blob:; object-src 'self' ">
|
这种方法也有个缺陷, 对于需要反复构建的网站, 内联script的hash值并非一成不变的, 此时就需要用nonce-<v>
Nonces 是通过在 CSP 中指定允许资源的序号,达到限制非法 inline 代码的目的。只有与 CSP 策略中序号一致的代码可以执行,具体使用方式如下(CSS就没必要搞安全了-或者说没那么重要):
Content-Security-Policy: script-src 'nonce-1'
<script nonce="1">alert(0);</script>
1 2 3 4 5 6 7
| <meta http-equiv="Content-Security-Policy" content="img-src 'self' imagebed.torch-fan.site img1.imgtp.com; script-src 'self' lib.baomitu.com at.alicdn.com utteranc.es 'nonce-1' 'nonce-2' 'nonce-3' 'nonce-4' 'nonce-5' 'nonce-6' 'nonce-7' 'nonce-8' 'nonce-9' 'nonce-10' 'nonce-11' 'nonce-12' 'nonce-13' 'nonce-14'; style-src 'self' 'unsafe-inline' at.alicdn.com lib.baomitu.com; media-src 'self' blob:; worker-src 'self' blob:; object-src 'self' ">
|
最后, 根据mozilla observatory的网站扫描结果, 最终网站的安全设置如下:
1 2 3 4 5 6 7 8 9 10
| <meta http-equiv="Content-Security-Policy" content="default-src 'none'; form-action 'none'; base-uri 'self'; img-src 'self' imagebed.torch-fan.site img1.imgtp.com; script-src 'self' lib.baomitu.com at.alicdn.com utteranc.es 'nonce-1' 'nonce-2' 'nonce-3' 'nonce-4' 'nonce-5' 'nonce-6' 'nonce-7' 'nonce-8' 'nonce-9' 'nonce-10' 'nonce-11' 'nonce-12' 'nonce-13' 'nonce-14'; style-src 'self' 'unsafe-inline' at.alicdn.com lib.baomitu.com; media-src 'self' blob:; worker-src 'self' blob:; object-src 'self'; font-src 'self' lib.baomitu.com at.alicdn.com data:; frame-src 'self' utteranc.es; ">
|