【发布时间】:2015-12-20 17:50:13
【问题描述】:
网络应用模型
假设我有一个敏感的 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 的公共文字对象,以便每个人都可以访问它。
isLegitimate 是什么?这是一个要实现的抽象函数,它决定哪些script 元素访问我的大苹果的哪些方法。该决定是针对script 元素的src 属性做出的。 (即他们的域名)
其他人像这样使用这个公共 API:
proxy.doStuffWithBigApple();
攻击模型
在我的网络应用程序中有广告占位符,以便可以加载和执行包括 JavaScript 代码在内的外部内容。所有这些外部资源都急切地想要访问我的大苹果。
注意:这些是在我的脚本之后添加的,导致无法访问原始window.bigApple。
我的问题
我的安全模型有什么规避方法吗?
关键边缘:
- 在解析时更改
src属性。 --- 不可能,因为src只能设置一次。 - 在运行时添加
script元素 --- 没有问题出现
【问题讨论】:
-
只是想知道您要保护您的网站免受什么侵害 - 即恶意广告商脚本不能实现他们自己的
bigApple吗?一些网站在 IFrame 中加载广告客户内容,以防止每个 IFrame 中的脚本通过 SOP inheritance rules 引用父页面。 -
@SilverlightFox 我不想在我的网站中实现这个逻辑,因为我已经知道 IFrame 是一种众所周知的沙盒不受信任脚本的方法。我的目的是将这种逻辑带到可能无法满足 SOP 原则的混合移动应用程序中。
标签: javascript html security access-control