我正在尝试通过设置Content-Security-Policy标头来缓解XSS攻击,但Chrome会不断抛出错误:
拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:“ script-src'self''nonce-Njg3MGUxNzkyMjViNDZkN2I3YTM3MDAzY2M0MjUxZGEzZmFhNDU0OGZjNDExMWU5OTVmMmMWQ4 =”。要启用内联执行,需要使用'unsafe-inline'关键字,哈希('sha256 -...')或随机数('nonce -...')。
我尝试在<script nonce="Njg3MGUxNzkyMjViNDZkN2I3YTM3MDAzY2M0MjUxZGEzZmFhNDU0OGZjNDExMWU5OTVmMmMwMTg4NTA3ZmY4OQ==" href="main.js"></script>
中设置随机数,但是它不起作用。
这是我的Content-Security-Policy
标头:
default-src 'none';
script-src 'self' 'nonce-NjJjN2E5YjA0ZDJhNDlhZjlhMDFmZjQzMjE4YzhmMTAzOWNjZjVjMGZjNDIxMWU5YWIyNGMwMTg4NTA3ZmY4OQ==';
connect-src 'self' https://vimeo.com;
img-src 'self';
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
media-src 'self' http://player.vimeo.com;
frame-src 'self' http://player.vimeo.com;
[我不喜欢将script-src
设置为unsafe-inline
,因为它使Content-Security-Policy的使用无效
虽然是does not seem to work with inline event handlers。因此,最好的办法是用您的JS文件中编写的适当事件处理程序替换该事件处理程序。如果您不能这样做,请尝试将'unsafe-hashes'添加到script-src
。
拒绝'unsafe-inline'
的荣誉,这是我们经常看到的捷径,包括在生产中。