【发布时间】:2016-08-19 23:41:27
【问题描述】:
我正在寻找一种方法,让一段代码 (A) 可以生成某种令牌,然后将其传递给另一段代码 (B),以使第三段代码无法拦截它(E)。
就本问题而言,假设 A 可以安全地生成令牌。
如果 B 向 A 公开某个函数 F,该函数接受包含令牌的对象作为其参数之一,则 A 可以直接传递该令牌。
但 E 可以通过例如覆盖 console.log 并检查堆栈来找到此标记。
var x = console.log
console.log = function Eve()
{
x.apply(this, arguments);
console.info(Thing.caller.arguments);
}
(当然假设F调用console.log,但实际上有很多这样的函数可以用这种方式覆盖)
我认为我对此有一个缓解措施,即在调用任何可能受损的函数之前从传递的对象中删除安全令牌。 即
var y = function Y(Secure)
{
var Thing = Secure.Arg;
delete Secure.Arg;
console.log('SomeMessage', arguments) ;
}
y({Arg:'SomeArg'})
(至少在 FF 中)操作 object 参数也会更改其在堆栈上的值,因此堆栈上的 arguments 对象现在包含一个空对象。
有没有其他方法可以让 E 访问传递的数据?
如果是,是否可以减轻这些方法的影响,或者我是否应该考虑其他更安全的选择?
为清晰而编辑:假设 E 是通过 A 或 B 控制之外的方式注入的 - 例如油脂猴用户脚本
【问题讨论】:
-
我认为您将很难阻止其他解决方案是:自己托管第三段代码。在不同来源的 iframe 中运行它。
标签: javascript security