Subresource Integrity对内联JavaScript有用吗?

时间:2017-07-19 15:15:15

标签: javascript subresource-integrity

我正在阅读有关Subresource Integrity的内容,并了解它是用于验证外部文件的。我想毫无疑问,我找不到isocppMDN内联JavaScript的任何引用。

那么,可以肯定地说SRI相关属性integritycrossorigin对于内联JavaScript完全没用吗?

4 个答案:

答案 0 :(得分:2)

  

那么,说明与SRI相关的属性integritycrossorigin对内联JavaScript完全没用是否安全?

是的,因为这些属性仅对具有script属性的src元素有用:

https://html.spec.whatwg.org/multipage/scripting.html#attr-script-integrity

  

integrity属性表示此元素负责的请求的完整性元数据。值是文本。嵌入模块脚本或未指定integrity属性时,不得指定src属性。 [SRI]

同样如问题中所述,MDN中的描述也清楚地表明了这一点:

https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

  

子资源完整性(SRI)是一项安全功能,可让浏览器验证他们提取的文件(例如,来自CDN)是否在没有意外操作的情况下传递。它的工作原理是允许您提供提取的文件必须匹配的加密哈希。

答案 1 :(得分:2)

我知道该线程有些旧,但是W3C现在支持完整性哈希检查。在以下情况下执行脚本:

  • 已设置src,完整性属性正确且与CSP策略匹配
  • 未设置src,完整性属性正确或匹配CSP策略

Pull request

WebAppSec Subresource Integrity


编辑: 似乎实际上只有Chrome支持此功能

答案 2 :(得分:1)

是的,可以这么说,因为当integrity没有“src”属性时,<script>标记的<script>属性会被忽略。当通过单独的HTTP请求获取资源时,SRI才会出现。

答案 3 :(得分:0)

如果要保护内联脚本文件,可以使用CSP标头中的nonce属性,并在脚本标签上指定该属性

  

nonce-base64-value
  使用加密随机数(使用一次的数字)的特定内联脚本的白名单。服务器每次发送策略时都必须生成一个唯一的随机数值。提供一个无法猜测的随机数非常重要,因为绕开资源策略是微不足道的。有关示例,请参见不安全的内联脚本。指定随机数会使现代浏览器忽略“ unsafe-inline”,仍然可以为不支持随机数的较旧浏览器设置