es6导入的子资源完整性

时间:2018-10-03 22:46:58

标签: es6-modules subresource-integrity

<script>接受integrity属性,因此我可以安全地加载模块:

<script type="module"
  src="https://example.com/module.mjs"
  integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
  crossorigin="anonymous"
></script>

但是在脚本中加载模块时如何确保安全?

  • 带有导入:
import foo from "https://example.com/module.mjs"
  • 动态导入:
import("https://example.com/module.mjs").then(console.log)
  • 甚至是网络工作者:
const myWorker = new Worker('worker.js')

1 个答案:

答案 0 :(得分:0)

请参阅此问题

Is it possible to use subresource integrity with ES6 module imports?

  

您可以使用RequireJS,并将您的代码转换为AMD或UMD来实现。 RequireJS有一个钩子onNodeCreated,它使您可以在将脚本标记添加到文档之前对其进行访问。您可以将sri属性添加到脚本标签上:

onNodeCreated: function(node, config, module, path) { node.setAttribute('integrity', integrityForModule); node.setAttribute('crossorigin', 'anonymous'); }

信用:https://stackoverflow.com/a/37065379

我使用Webpack(目标为UMD)和RequireJS。将相关模块放在webpack配置文件的外部部分中,这样就不会将这些模块编译为已转换的代码。