gpt4 book ai didi

javascript - 保护 JavaScript 对象免受外部脚本的攻击

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:54 25 4
gpt4 key购买 nike

网络应用模型

假设我有一个敏感的 JS 对象,我可以通过它来做关键的事情。我的要求是我想完全包装这个对象,这样就没人可以访问它了。这是我包装此对象的模式。

var proxy = (function (window){
// A private reference to my critical object (i.e. big apple)
var bigApple = window.bigApple;

// Delete this property so that no one else can access it
delete window.bigApple;

// Oooah, It's mine! I'm now eating it :)

// Public APIs exposed globally
return {
doStuffWithBigApple: function (){

// The Script element being executed now
var who = document.currentScript;

// Access control
if(isLegitimate(who)){
return bigApple.doStuff();
}
}
};
}) (window);

通过这段代码,我导出了一个名为 proxy 的公共(public)文字对象,以便每个人都可以访问它。

什么是 isLegitimate?它是一个要实现的抽象函数,它决定哪些 script 元素访问我的大苹果的哪些方法。该决定是根据 script 元素的 src 属性做出的。 (即他们的域名)

其他人像这样使用这个公共(public) API:

proxy.doStuffWithBigApple();

攻击模型

在我的网络应用程序中有用于广告的占位符,以便可以加载和执行包括 JavaScript 代码在内的外部内容。所有这些外部资源都渴望访问我的大苹果。

注意:这些是在我的脚本之后添加的,导致无法访问原始 window.bigApple

我的问题

我的安全模型有什么规避方法吗?

关键边缘:

  • 在解析时更改 src 属性。 --- 不可能,因为src只能设置一次。
  • 在运行时添加 script 元素 --- 没有出现问题

最佳答案

你创建代理的想法是好的 imo,但是,如果你可以访问 ES6,为什么不查看 Proxy ?我认为它可以开箱即用。

MDN 提供了很好的示例,说明如何在 setter 等中使用陷阱进行值验证。

编辑:

可能的陷阱 我想象过:
document.currentScript 在 IE 中不被支持。因此,如果您关心它并决定对其进行 polyfill/使用预先存在的 polyfill,请确保它是安全的。或者它可以用于动态修改 document.currentScript 返回的外部脚本 url 并倾斜代理。我不知道这是否会发生在现实生活中。

关于javascript - 保护 JavaScript 对象免受外部脚本的攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com