我正在阅读有关 Subresource Integrity 的内容,并了解它用于验证外部文件。我想我在MDN或W3C中找不到任何对内联 JavaScript 的引用也就不足为奇了。
那么,是否可以肯定地说与 SRI 相关的属性integrity
和crossorigin
对内联 JavaScript 完全没用?
那么,是否可以肯定地说与 SRI 相关的属性
integrity
对内crossorigin
联 JavaScript 完全没用?
是的,因为这些属性仅对script
具有src
属性的元素有用:
https://html.spec.whatwg.org/multipage/scripting.html#attr-script-integrity
该
integrity
属性表示该元素负责的请求的完整性元数据。值为文本。integrity
嵌入模块脚本或未指定属性时,不得指定该属性src
。[社会责任研究所]
同样如问题中所述,MDN 中的描述也清楚地说明了这一点:
https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity
子资源完整性 (SRI) 是一项安全功能,它使浏览器能够验证它们获取的文件(例如,从 CDN 获取的文件)是否在没有意外操作的情况下交付。它通过允许您提供获取的文件必须匹配的加密哈希来工作。
我知道线程有点老,但是 W3C 现在支持完整性哈希检查。在以下情况下执行脚本:
编辑: 似乎实际上只有 Chrome 支持此功能
是的,可以肯定地说,因为标签的integrity
属性在没有“src”属性<script>
时会被忽略。<script>
SRI 只有在通过单独的 HTTP 请求获取资源时才会出现。
如果您正在寻找保护内联脚本文件,您可以在 CSP 标头中使用nonce属性并在脚本标签上指定该属性
nonce-base64-value
使用加密随机数(使用一次的数字)的特定内联脚本的白名单。服务器每次传输策略时都必须生成唯一的 nonce 值。提供一个不可猜测的随机数至关重要,因为绕过资源的策略是微不足道的。有关示例,请参见不安全的内联脚本。指定 nonce 会使现代浏览器忽略“unsafe-inline”,在没有 nonce 支持的情况下仍然可以为旧版浏览器设置它。