子资源完整性和性能

Posted

技术标签:

【中文标题】子资源完整性和性能【英文标题】:Subresource Integrity and performance 【发布时间】:2016-07-05 18:30:00 【问题描述】:

我正在阅读有关 Subresource Integrity 的信息,但我担心性能损失。这(必须在执行之前对每个文件进行哈希处理)如何减慢页面加载速度,尤其是在 CPU 级别较低的设备上?

【问题讨论】:

【参考方案1】:

我今天运行了一个性能基准测试,并在为 120KB Twitter Bootstrap 缩小的 CSS 文件生成哈希时观察到以下平均值。

File Size: 121200
SHA1   Time: 0.50199 ms
SHA256 Time: 0.89691 ms
SHA384 Time: 1.59249 ms
SHA512 Time: 1.58901 ms

SHA1 被认为是不安全的,可能无法正常工作。因此,如果您使用SHA256,您可以预期在通用设备上每个资源的总延迟小于 1 毫秒。我在性能不是很好的一年半的 Corei5 ASUS 笔记本电脑上运行了这个基准测试。此外,120KB 略高于平均水平。大多数静态文件更小,更小的文件大小意味着更快的哈希生成。

基于这些基准,如果我权衡使用 SRI 的好处和每个资源 1ms 的成本,我会更喜欢使用 SRI,因为成本几乎可以忽略不计。正如您在评论中所说,黑客进入大型 CDN 提供商服务器的变化不容忽视。我会向您指出past incident,黑客在其中注入了自己的 javascript 来攻击 IE 用户。

【讨论】:

【参考方案2】:

如何...? - 它使用 CPU 来计算哈希值。多少? - 测量,取决于 CPU 和资源大小等。但是... - 为了提高性能,您可以尝试组合和最小化资源,并使用较少的 CPU 密集型哈希算法。

别担心,开心就好!

【讨论】:

重点是:值得这样做吗?大型公共 CDN(如 googleapis 或 cdnjs)被黑的可能性接近于零,如果使用 https,则不会发生 MITM 攻击,所以目前我认为添加它没有任何好处 @the_nuts 虽然 CDN-s 被黑或被接管、HTTPS 被破坏等的可能性可能很低(但不是零),但它真的归结为您的意见并分析性能和安全性对您的特定应用程序有多大价值。我怀疑我的意见(通常倾向于重视安全性而不是性能)在 Stack Overflow 格式中是否是一个很好的答案。

以上是关于子资源完整性和性能的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript 的图像的子资源完整性

子资源完整性保护在 Chrome 中不起作用

子资源完整性对内联 JavaScript 有用吗?

如何获得 aspnetcdn.com 的 SRI(子资源完整性)哈希?

子资源完整性:如何仅显示警告而不显示阻止资源?

检查请求是不是是 Chrome 扩展程序中的子资源完整性