问题标签 [subresource-integrity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
html - CDN 上包含 CSS 的字体的子资源完整性(例如 font-awesome)
如何将SRI用于.css
CDN 上包含的文件所包含的资源。
例如,如果您在 HTML 中包含此内容:
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
这将加载通过 CSS 包含的字体,例如url('../fonts/fontawesome-webfont.woff2?v=4.7.0')
当然,这些字体可能会被篡改,以利用一些不为人知的浏览器漏洞,因此强制对它们进行哈希检查也是有意义的。
如何告诉浏览器对fontawesome-webfont.*
通过.css
?
注意:看起来子子资源哈希尚不支持,但我不确定这是否是最新的。
javascript - 检查请求是否是 Chrome 扩展程序中的子资源完整性
是否可以通过 Chrome 扩展程序的子资源完整性 (SRI) 检查脚本/样式表是否受到完整性保护?
我想在发起请求之前知道这一点,所以应该用chrome.webRequest.onBeforeRequest
. 但它没有给出关于请求的提示,因为 SRI 是浏览器端。一切都在请求完成后发生。
从我的角度来看,获取此信息的唯一方法是直接访问 DOM。这意味着我必须暂停所有请求,直到 HTML 被完全解析,这似乎不是要走的路。
也许 SRI 太新而无法被扩展访问,因为我在 Chrome 扩展文档中的任何地方都没有找到它。
google-chrome - 谷歌浏览器 SRI 哈希
有没有人在使用 Google Chrome 和 SRI Hash 时遇到过这个问题,它一直在控制台窗口中抛出同样的错误:
无法在资源“ https://fonts.googleapis.com/css?family=Indie+Flower ”的“完整性”属性中找到有效的摘要,计算出的 SHA-256 完整性为“yxJPuU/cJi0/8FoS+agssT/MtC4P3SGuU+ JOzbTejqQ='。该资源已被阻止。
我正在从https://report-uri.io/home/sri_hash生成代码,并且还尝试过https://www.srihash.org/
根据这个网站https://glebbahmutov.com/blog/subresource-integrity/作者有同样的问题,所以添加了多个哈希,这就是我所拥有的<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Indie+Flower" integrity="sha256-CoGIUDlbZltnYk6u/wQKXOszdOOWImA1XzSERnNzHlc= sha384-vk+perBz0d5g0G+x7+4BxElvHeiaLNX7jegOI63Bg53TxNYaUzLGEsSQ4AmIwVr4 sha512-h+9Z3+9s3jtPJjXU9phAXFQwYYFSYhXlnkPwkuubLFf5kfeXWIRC32YkRdB08xmut/dJG/RjPoiR/r4DAtm3PQ==" crossorigin="anonymous">
javascript - 使用 javascript 的图像的子资源完整性
我最近了解了子资源完整性,它可以防止执行更改的 JS 和 CSS。由于当前的实现缺乏对图像的支持,我尝试用自己的实现进行试验。
问题是每次我得到不同的 MD5 哈希。请帮助我找出我做错了什么。
我使用 JavaScript-MD5 ( https://github.com/blueimp/JavaScript-MD5 ) 获取 MD5 哈希和 Qwest.js ( https://github.com/pyrsmk/qwest ) 获取图像
javascript - Angular-Cli 的子资源完整性
我想知道是否有人知道使用 Angular-Cli 激活子资源完整性的可能方法。根据以下链接:GitHub Pull Request这将是一个功能(或未来的功能)。我希望激活它,但它似乎在当前版本上没有激活。还有另一种方法可以将子资源完整性与 Angular-Cli 一起使用吗?
amazon-s3 - 子资源完整性 CORS 在 Chrome 上中断
我在 s3 存储桶中有一个 js 文件,由 cloudfront 提供服务,通过 cname 调用。
请求 -> cname.fake.com -> cloudfront -> s3bucket
生成的标签具有完整性和 cossorigin 属性,似乎适用于所有浏览器,但 chrome 给我一个 CORS 错误。如果我将标签 src 直接指向云端,则资产将正确提供。我使用 mitproxy 来监视请求,当它发送到 cname 时,chrome 甚至在它发出之前取消了请求。允许访问控制标头通过,有什么想法吗?
html - 哪些哈希算法可用于子资源完整性?
我的问题与使用哈希算法进行子资源完整性时的浏览器支持有关。
- 在所有支持 SRI 的浏览器中,哪些散列算法有望用作 SRI 散列?或者有没有可用的浏览器兼容性图表?规范说浏览器应该避免破坏算法,但是关于哪个浏览器支持什么的信息并不多。此外,我找不到为此目的的哈希算法列表。
- SHA-3 可以用于 SRI 哈希吗?如果是这样,它会是什么样子?
integrity="sha3-384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
或类似的东西?有没有浏览器支持它?
javascript - 如何在另一个js文件中导入远程js文件(具有属性)
我想使用传单 API,它需要以下脚本标签。
现在 Require 和 getScript 允许您添加我们需要包含的 js 文件,但我如何添加完整性属性。我无权访问 html,所以我们可以在使用 getScript 或 require 包含 js 文件时添加完整性和跨域属性。
security - 标签的内容安全策略/子资源完整性?
我托管了一个网站,允许用户下载存储在内容分发网络 (CDN) 上的文件。从我的站点到 CDN 上文件的链接类似于<a href=https://cdndomain.com/path/to/file>
. 我想为我的用户提供一种方法来确保该文件未被 CDN 操纵。
当然,我可以在我的网站上发布文件的哈希(当然,它是由 SSL/TLS 保护的)。然后,在用户下载文件后,他们可以获取文件的哈希值并验证它是否与我网站上发布的哈希值匹配。这并不少见。但是,我的许多用户不够精明,无法理解这个过程。而且,即使对于那些人来说,这个过程也有些麻烦。我正在寻找一种更自动化/更方便的方法来确保该文件未被操纵。
我知道Chrome、Firefox 和 Safari 现在支持内容安全策略(CSP) 和子资源完整性(SRI)。使用 CSP/SRI,网站可以确保 .js 文件、.css 文件等在其他地方托管并由<script>
or标记引用,方法是使用属性在or标记<link>
中包含目标文件的哈希,例如:<script>
<link>
integrity
或者
这非常方便,因为浏览器会检查目标文件的哈希值是否与integrity
“幕后”属性中指定的哈希值相匹配,而无需任何用户干预。从 CDN 下载文件后,浏览器获取文件的哈希值并检查该哈希值是否与或标记integrity
属性中提供的哈希值匹配。如果哈希不匹配,浏览器会警告用户并且不执行脚本或应用 css 样式表。 <script>
<link>
我正在为<a>
标签中引用的资源寻找类似的东西——我可以在标签中指定目标资源的哈希值<a>
,并且浏览器会在从 CDN 下载资源后、但在使其可用之前执行类似的检查给用户,并在哈希值不匹配时警告用户。但是根据上面引用的 MDN 文档,CSP 和 SRI 仅适用于<script>
标签和<link>
标签,不适用于<a>
标签。
有谁知道解决方案?