javascript – Microsoft Edge不接受内容安全策略的哈希值

问题

Content-Security-Policy应认将脚本和样式解析列入黑名单,并根据各种指令允许它,其中一个指令被验证为预期输出的散列.浏览器必须无法实现任何未提前匹配哈希的Javascript或CSS.具有匹配哈希的代码应该正常执行. Microsoft Edge拒绝所有JS / CSS页内块.

>说明访问Microsoft Edge中的以下实时演示链接,以及任何其他浏览器.
>现场演示:http://output.jsbin.com/biqidoqebu

演示原始源代码

<!doctype html>
<html>
<head>
<Meta charset="utf-8" />
<Meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rheyzzsyFelfO2gXvYEuWA='; script-src https://ajax.googleapis.com 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc=';" />
<Meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rheyzzsyFelfO2gXvYEuWA='; script-src https://ajax.googleapis.com 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc=';" />
<style>#loading{color:transparent}#loading:after{color:green;content:"Style loaded."}</style>
</head>
<body>
<span id="loading">Hashes loading...</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>alert("Script loaded.")</script>

>预期的行为:正文应该更改为“样式加载.”,警告框应该说“脚本已加载.”,外部Javascript不应该抛出错误.控制台显示没有问题.
>实际行为:身体卡在“哈希加载……”上.哈希被拒绝,外部Javascript被接受.控制台显示错误

CSP14304:未知来源”sha256-JtUhvM7uQO2KX5IEGWxN rheyzzsyFelfO2gXvYEuWA =”指令’style-src’in-source将被忽略.

CSP14306:没有为指令’style-src’指定的源 – 这相当于使用’none’并且将阻止下载此类型的所有资源.

CSP14304:未知源”sha256-iZzrsbzuGxfOaTdnB / E6RQBssyXQRp7W8YtZD2Wg / Rc =”用于指令’script-src’in-source将被忽略.

CSP14312:资源违反指令’style-src’sha256-JtUhvM7uQO2KX5IEGWxN rheyzzsyFelfO2gXvYEuWA =”in:inline style.资源将被阻止.

CSP14312:资源违反指令’script-src LINK-REMOVED-INSUFFICIENT-REPUTATION-ON-STACKOVERFLOW-SHOULD-BE-THE-GOOGLE-API-URL’sha256-iZzrsbzuGxfOaTdnB / E6RQBssyXQRp7W8YtZD2Wg / Rc =”in:inline script.资源将被阻止.

试图修复

>验证哈希是否正确:双重检查计算是二进制的,就是它.没什么可做的,其他浏览器都接受它们.
>将default-src和connect-src的值更改为self而不是none

我想不出任何其他的尝试.

24小时后更新:添加了X-Content-Security-Policy以保证完整性和安全性. JSBin URL已更新,但它对这种特定情况没有任何影响.

解决方法

编辑:这可能是不正确的.见上面的评论.

IE 11不支持Content-Security-Policy(仅限X-Content-Security-Policy),此操作无法打开.
IE 12支持CSP,但没有grok nonces / hashes,它关闭失败…除非你还在Content-Security-Policy头中提供’unsafe-inline’.

CSP级别2表示“如果提供了散列或随机数,则忽略’unsafe-inline’.”这是为了向后兼容,因为较旧的浏览器会识别’unsafe-inline’而不是nonce / hashes.见http://www.w3.org/TR/CSP2/#directive-script-src

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...