我正在执行代码审核,由于不良行为,攻击者可能会覆盖toString
方法。它正在使用字符串而不是方法覆盖toString
方法。
采用以下代码:
let a = new Object();
a.toString = "function(){ return 'hello world' }"
a.toString
是字符串,而不是函数。因此,a.toString()
不起作用。
是否有可能导致意外执行toString
字符串的黑客行为(考虑到该字符串可以是任何东西,并且不考虑评估)?
答案 0 :(得分:1)
根据您的清晰评论:
我正在执行代码审核,并且toString方法可以重写。由于输入来自客户端,因此它将用客户端发送的字符串覆盖实例的toString方法。我想知道这里是否有安全隐患。
除非您的代码执行某些操作以将该字符串转换为函数(eval(a.toString)
,new Function(a.toString)
,btn.onclick = a.toString;
,...),否则它不会成为一个函数,因此从某种意义上讲这不是安全隐患。尝试在toString
上(显式或隐式)调用a
的任何事物都会得到一个错误。例如,这是toString
的隐式使用:
let a = new Object();
a.toString = "function(){ return 'hello world' }"
String(a); // TypeError: a.toString is not a function
这显然不是可取的,但是您说这是一个错误,并且您正在尝试探索可以利用它的程度。我说这不是特别可利用的。