javascript - 将插件加载到网络应用程序中的安全/可靠方式

标签 javascript web browser google-chrome-extension

我有一个接受 JS 插件的网络应用程序。也就是说,用户想要加载到我的应用程序中的其他人编写的 JavaScript 代码。

目前我正在使用 eval() 将他们的 JS 代码评估到运行时中,但我知道那是不安全的。有没有比 eval() 更好的方法来做到这一点?

需要明确的是,用户将我指向一个枯燥的文本文件(一个 URL),并且文件中的 JS 需要以某种方式出现。

我只知道动态导入 JS 脚本的两种方法:

  1. 使用 AJAX,获取 JS 代码,然后对其运行 eval()。
  2. 动态添加 <script>标记到 DOM

问题的目的是找出一个是否比另一个更安全,或者是否有比上述 2 个选项更好的方法。

最佳答案

Is one of these two more secure than the other?

不,从安全 Angular 来看,它们同样糟糕(好)。

它们在细节上有所不同,这会导致采用不同的方法来提高它们的安全性,但最终两者都会在您的环境中运行由不受信任的第三方编写的代码,并享有其所有特权。它基本上是一个 persisted XSS问题。

Is there a better way than the above 2 options?

很多。这主要取决于这些插件在您的应用程序中应该做什么,谁编写它们以及谁安装(启用)它们。您作为应用程序提供者和用户都不希望任意代码对用户数据造成严重破坏。如果插件需要访问数据,您需要采取管理措施来确保只有受信任的代码才能运行,例如插件代码审计。至少您需要告知您的用户他们必须在启用插件之前信任插件作者,这会给他们带来负担。你也应该确保有 usable logs以防出现问题。

如果您真的想运行任意、不受信任的代码而不授予它访问用户数据的权限,您将需要考虑沙盒。有多种方法本质上是在代码无法突破的虚拟机中执行。

关于javascript - 将插件加载到网络应用程序中的安全/可靠方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345601/

相关文章:

javascript - 如何使用多个谷歌图表,以便它们可以在动态表的单元格中使用

python - 我可以使用 lxml 只下载部分 Internet 网页吗?

css - Div出现在滚动条上方

javascript - 如何在 Angular 图表条形图中使用纯色条

javascript - 使用 grunt.js 生成动态文件名

javascript - 将 JSON 数组放入 Handlebars

javascript - 使用主窗口中的预连接资源提示来提高外部 iframe 中脚本的性能

javascript - 你如何在 javascript 中选择包含特定字符串的所有 id 标签?

java - 如何通过Java以编程方式访问网站?下载 HTML 代码、保存 cookie、填写和发送表格等

javascript - 微软边缘 API 错误 "browser is not defined"