使js对象循环冗余
Make js object loop redundant
我是一个JS的测试人员api。用户将直接调用我们的方法。
示例:
function funcWeGiveToUser(objFromUsers){
// here we will loop over user provided object
}
开发人员以我们盲目循环 objFromUsers
的方式编写了 funcWeGiveToUser
,所以我试图证明通过盲目使用没有验证的对象会产生不好的结果发生了。
现在我想看看,通过提供一个包含 getter 的 objFromUsers
,我是否可以以某种方式破解代码 (我已经通过它访问了私有数据,耶!).
我想要的是让对象永远变化,这样当我们的 API 循环遍历它时,它就会变得多余 - 但我无法实现。
我试过写这样一个对象:
var objFromUsers = {
get addNewOne(){
this.counter = this.counter || 1;
this["element"+ (this.counter++)] = "some value";
return 2;
}
}
但是如果我自己循环,结果是这样的:
for (el in objFromUsers) console.log(el+": "+objFromUsers[el]);
// addNewOne: 2
console.log(objFromUsers)
// {counter: 2, element1: "some value"}
再次循环我确实得到了之前添加的元素:
for (el in objFromUsers) console.log(el+": "+objFromUsers[el]);
// addNewOne: 2
// counter: 3
// element1: some value
console.log(objFromUsers)
// {counter: 3, element1: "some value", element2: "some value"}
然而,我实际上希望循环永远看到一个新密钥,因此它会不断迭代。是否可以进行这种循环冗余?
for..in
如何因不受信任的输入而失败的一个例子是代理对象在其 ownKeys
陷阱中做了一些令人讨厌的事情:
evil = new Proxy({}, {
ownKeys() {
console.log('got ya');
return [];
}
});
for(x in evil) {
console.log(x)
}
我是一个JS的测试人员api。用户将直接调用我们的方法。
示例:
function funcWeGiveToUser(objFromUsers){
// here we will loop over user provided object
}
开发人员以我们盲目循环 objFromUsers
的方式编写了 funcWeGiveToUser
,所以我试图证明通过盲目使用没有验证的对象会产生不好的结果发生了。
现在我想看看,通过提供一个包含 getter 的 objFromUsers
,我是否可以以某种方式破解代码 (我已经通过它访问了私有数据,耶!).
我想要的是让对象永远变化,这样当我们的 API 循环遍历它时,它就会变得多余 - 但我无法实现。
我试过写这样一个对象:
var objFromUsers = {
get addNewOne(){
this.counter = this.counter || 1;
this["element"+ (this.counter++)] = "some value";
return 2;
}
}
但是如果我自己循环,结果是这样的:
for (el in objFromUsers) console.log(el+": "+objFromUsers[el]);
// addNewOne: 2
console.log(objFromUsers)
// {counter: 2, element1: "some value"}
再次循环我确实得到了之前添加的元素:
for (el in objFromUsers) console.log(el+": "+objFromUsers[el]);
// addNewOne: 2
// counter: 3
// element1: some value
console.log(objFromUsers)
// {counter: 3, element1: "some value", element2: "some value"}
然而,我实际上希望循环永远看到一个新密钥,因此它会不断迭代。是否可以进行这种循环冗余?
for..in
如何因不受信任的输入而失败的一个例子是代理对象在其 ownKeys
陷阱中做了一些令人讨厌的事情:
evil = new Proxy({}, {
ownKeys() {
console.log('got ya');
return [];
}
});
for(x in evil) {
console.log(x)
}