让网站会员上传js给其他会员使用有什么危害?
what are the dangers of letting website members upload js for other members to use?
例如CodePen and Khan Academy programming projects。他们让他们的用户上传将 运行 在其他计算机上的 js 脚本,codepen 甚至允许拥有专业帐户的用户使用第三个库。我想在我的网站上做同样的事情,这有多危险?如何将风险降到最低?
它相对相当安全如果你实施了适当的沙盒。
你要避免的一件事是让用户代码 运行 位于其他用户浏览器的顶层,因为如果你允许,其他用户在网站上的所有数据都可以被检索,记录和被盗,等等。但是,如果您确保用户代码 运行 不在顶层,而是在沙盒 iframe 中(一个不能使顶层 window 运行 任何东西),它会应该没问题吧
有关此问题的类似讨论,请参阅 Meta Stack Overflow 上的 this question。您提到的网站,以及其他从用户(如 Stack Overflow 和 JSFiddle 等)实现实时代码编辑器的网站都使用了这种 运行 在沙盒 iframe 中整合用户代码的技术,因此 运行s 无法到达顶级 window,其数据必须保持安全。 iframe 还应该使用与父站点不同的来源(如果有的话)- 现代浏览器自然而然地出于这种原因对 cross-site 通信实施了非常严格的限制(因此来自一个来源的 iframe 可以做的很少到另一个来源的父 window,除非父 window 专门设置了这样的东西)。
我说沙盒 iframe 漂亮 安全但绝对 不安全,因为 it's not impossible that something like Spectre 最终可能在 front-end JavaScript 做一些真正富有成效的恶意。我不认为它已经在野外被发现,它可能永远不会,但它不是不可能的。
例如CodePen and Khan Academy programming projects。他们让他们的用户上传将 运行 在其他计算机上的 js 脚本,codepen 甚至允许拥有专业帐户的用户使用第三个库。我想在我的网站上做同样的事情,这有多危险?如何将风险降到最低?
它相对相当安全如果你实施了适当的沙盒。
你要避免的一件事是让用户代码 运行 位于其他用户浏览器的顶层,因为如果你允许,其他用户在网站上的所有数据都可以被检索,记录和被盗,等等。但是,如果您确保用户代码 运行 不在顶层,而是在沙盒 iframe 中(一个不能使顶层 window 运行 任何东西),它会应该没问题吧
有关此问题的类似讨论,请参阅 Meta Stack Overflow 上的 this question。您提到的网站,以及其他从用户(如 Stack Overflow 和 JSFiddle 等)实现实时代码编辑器的网站都使用了这种 运行 在沙盒 iframe 中整合用户代码的技术,因此 运行s 无法到达顶级 window,其数据必须保持安全。 iframe 还应该使用与父站点不同的来源(如果有的话)- 现代浏览器自然而然地出于这种原因对 cross-site 通信实施了非常严格的限制(因此来自一个来源的 iframe 可以做的很少到另一个来源的父 window,除非父 window 专门设置了这样的东西)。
我说沙盒 iframe 漂亮 安全但绝对 不安全,因为 it's not impossible that something like Spectre 最终可能在 front-end JavaScript 做一些真正富有成效的恶意。我不认为它已经在野外被发现,它可能永远不会,但它不是不可能的。