Chrome 66中disown-opener等CSP指令不被识别,求替代方案
Chrome 66 CSP指令兼容问题的确认与替代方案
你完全没错,这确实是Chrome 66对W3C CSP标准的实现滞后导致的问题——你提到的这三个指令都属于CSP 3规范的内容,但Chrome 66版本还未完成对它们的支持。下面给你逐个说明对应的替代方案:
1. disown-opener 指令
这个指令的作用是切断当前页面与通过它打开的新窗口之间的opener关联,防止新窗口通过window.opener操作原页面。在Chrome 66中,你可以用两种方式替代:
- 对于HTML标签(如
<a>、<form>),直接添加rel="noopener noreferrer"属性; - 如果是通过JavaScript的
window.open()打开窗口,在参数中指定noopener:window.open('https://example.com', '_blank', 'noopener')
2. reflected-xss 指令
该指令用于配置浏览器对反射型XSS的防护策略。Chrome 66不支持这个CSP指令,你可以改用**X-XSS-Protection响应头**来实现相同的防护效果,推荐设置:
X-XSS-Protection: 1; mode=block
这个响应头是浏览器原生的XSS防护机制,Chrome在很早的版本就已经支持,启用后会直接阻止疑似反射型XSS的页面加载。
3. referrer 指令
这个CSP指令用来控制页面发送的Referrer信息。Chrome 66不支持它,替代方案是使用独立的**Referrer-Policy响应头**,根据你的需求选择合适的取值,比如:
- 跨域时仅发送源信息:
Referrer-Policy: strict-origin-when-cross-origin - 完全不发送Referrer:
Referrer-Policy: no-referrer - 仅同源时发送完整Referrer:
Referrer-Policy: same-origin
另外补充一句:如果后续能升级Chrome到70及以上版本,这些CSP 3指令就会被原生支持了。当前版本下,上面的替代方案是最可靠的兼容方式。
内容的提问来源于stack exchange,提问作者Bradley
相关产品推荐
相关产品推荐

