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

子资源完整性对内联JavaScript有用吗?,javascript,subresource-integrity,Javascript,Subresource Integrity,我正在阅读有关子资源完整性的文章,并理解它是用来验证外部文件的。我想这并不奇怪,我从或中找不到任何内联JavaScript的引用 因此,可以安全地说与SRI相关的属性,integrity和crossorigin对于内联JavaScript完全没有用处吗?是的,可以安全地说,因为标记的integrity属性在没有“src”属性时被忽略。只有通过单独的HTTP请求获取资源时,SRI才会出现 那么,可以安全地说与SRI相关的属性integrity和crossorigin对于内联JavaScript是完

我正在阅读有关子资源完整性的文章,并理解它是用来验证外部文件的。我想这并不奇怪,我从或中找不到任何内联JavaScript的引用


因此,可以安全地说与SRI相关的属性,
integrity
crossorigin
对于内联JavaScript完全没有用处吗?

是的,可以安全地说,因为
标记的
integrity
属性在
没有“src”属性时被忽略。只有通过单独的HTTP请求获取资源时,SRI才会出现

那么,可以安全地说与SRI相关的属性
integrity
crossorigin
对于内联JavaScript是完全无用的吗

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

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

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

子资源完整性(SRI)是一种安全功能,允许浏览器验证它们获取的文件(例如,从CDN获取的文件)是否在没有意外操作的情况下交付。它的工作原理是允许您提供获取的文件必须匹配的加密散列


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

nonce-base64-value
使用加密nonce(使用一次的数字)的特定内联脚本的白名单。服务器每次传输策略时都必须生成唯一的nonce值。提供一个不可用的nonce是至关重要的,因为绕过资源的策略在其他方面是微不足道的。有关示例,请参见不安全内联脚本。指定nonce会使现代浏览器忽略“不安全内联”,在没有nonce支持的情况下,旧浏览器仍然可以设置“不安全内联”


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

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


编辑: 看起来实际上只有Chrome支持这个功能