Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript安全问题_Javascript_Security_This - Fatal编程技术网

JavaScript安全问题

JavaScript安全问题,javascript,security,this,Javascript,Security,This,我想知道下面的函数如何设置'this'元素并提取数组单元格?求你了 //我的安全代码 var priv=['item-0','item-1']; var api={push:functionx{priv.pushx} api.store=functioni,x{priv[i]=x} //攻击脚本 var结果; 存储'push',函数{result=this[0]}; api.push; //结果是私有数组的单元格0 //怎么做? //如果我更改“push”参数,则结果为空! document.

我想知道下面的函数如何设置'this'元素并提取数组单元格?求你了

//我的安全代码 var priv=['item-0','item-1']; var api={push:functionx{priv.pushx} api.store=functioni,x{priv[i]=x} //攻击脚本 var结果; 存储'push',函数{result=this[0]}; api.push; //结果是私有数组的单元格0 //怎么做? //如果我更改“push”参数,则结果为空!
document.writeresult发生的是api.store'push',函数{result=this[0]};重写priv数组的push方法。这意味着,在这一行之后,push不再是javascript本机提供的push方法,而是攻击者的自定义函数,即函数{result=this[0]}。现在,当您调用api.push时,它将调用被覆盖的priv.pushx。由于push是在一个对象上调用的,因此它绑定到该对象,而该对象在该对象上的优先级更高。因此,result=this[0]等于result=priv[0],result将包含第一个数组项。

发生的是api.store'push',函数{result=this[0]};重写priv数组的push方法。这意味着,在这一行之后,push不再是javascript本机提供的push方法,而是攻击者的自定义函数,即函数{result=this[0]}。现在,当您调用api.push时,它将调用被覆盖的priv.pushx。由于push是在一个对象上调用的,因此它绑定到该对象,而该对象在该对象上的优先级更高。因此,result=this[0]等于result=priv[0],result将包含第一个数组条目。

this关键字可能有不同的含义,具体取决于上下文。您没有在任何地方声明结果变量,因此默认情况下它具有全局作用域,这就是为什么它在函数外部可用。你能提供更多关于你工作的细节吗problem@CROSP我有一些重要的内容,我想保证它们的安全。我的一个朋友向我发送了这段代码,我意识到他可以使用我的API对象访问私有变量。@easa如果攻击者可以在同一环境中执行任意代码,您通常已经丢失了。你到底想保护什么?是的,没错。我正在研究@Bergit的一个API。根据上下文的不同,这个关键字可能有不同的含义。您没有在任何地方声明结果变量,因此默认情况下它具有全局作用域,这就是为什么它在函数外部可用。你能提供更多关于你工作的细节吗problem@CROSP我有一些重要的内容,我想保证它们的安全。我的一个朋友向我发送了这段代码,我意识到他可以使用我的API对象访问私有变量。@easa如果攻击者可以在同一环境中执行任意代码,您通常已经丢失了。你到底想保护什么?是的,没错。我正在处理一个API@BergiI无法理解它是如何被覆盖的?在哪一行?how?api.store'push',函数{result=this[0]};调用api.store=functioni,x{priv[i]=x}。这里,i是push,x是攻击者传递的函数。这意味着您正在有效地执行priv[push]=函数{result=This[0]},该函数等于priv.push=函数{result=This[0]},因此覆盖了push方法。我无法理解它是如何被覆盖的?在哪一行?how?api.store'push',函数{result=this[0]};调用api.store=functioni,x{priv[i]=x}。这里,i是push,x是攻击者传递的函数。这意味着您正在有效地执行priv[push]=函数{result=This[0]},它等于priv.push=函数{result=This[0]},因此覆盖了push方法。