我正在寻找一种方法,即一段代码(A)可以生成某种类型的令牌,然后将它传递给另一段代码(B)一段代码无法拦截它(E)。在函数之间安全地传递令牌
为了这个问题的目的,假设A可以安全地生成令牌。
如果B公开了一些函数F给A,它接受一个包含该标记的对象作为参数之一,那么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至少)操纵对象参数也改变其在栈上的值,以便在堆栈上arguments
对象现在包含一个空对象。 E还有其他什么方法可以访问传递的数据吗? 如果是,那么这些方法是可以缓解还是应该考虑其他更好的安全性?为了清晰起见进行编辑:假定E通过在A或B的控制之外的方式注入 - 例如, Greasemonkey的用户脚本
我想你会有一个不好的时间阻止这个其他的解决方案是:自己托管第三块代码。在不同来源的iframe中运行它。 –