Phi*_*ert -1 javascript node.js
我现在有最奇怪的错误;我构建了这个函数来从我的服务器的输出中删除 xss 漏洞,并且在解析 MongoDB 结果对象(架构中有子文档)时,数组属性会立即从数组变为未定义。请参阅下面的代码和跟踪:
代码:
function xss(value){
if(typeof value === "object" && value !== null){
return xssObjectEscape(value);
}else if(typeof value === "string"){
return xssStringEscape(value);
}
}
function xssStringEscape(text) {
return text.replace(/&/g, '&').
replace(/</g, '<'). // it's not necessary to escape >
replace(/"/g, '"').
replace(/'/g, ''');
}
function xssObjectEscape(object) {
for (var prop in object) {
if(typeof object[prop] === "string"){
object[prop] = xssStringEscape(object[prop]);
}else if(Array.isArray(object[prop])){
console.log("xss Array");
console.log(`${prop}: ${JSON.stringify(object[prop])}`);
console.log(object[prop]);
console.log(typeof object[prop]);
console.log(object[prop].constructor);
console.log(object[prop].constructor.name);
console.log(object[prop].length);
for(let i = 0 ; i < object[prop].length ; i++){
object[prop] = xss(object[prop][i]);
}
}else if(typeof object[prop] === "object" && object[prop] !== null){
xssObjectEscape(object[prop]);
}
}
return object;
}
Run Code Online (Sandbox Code Playgroud)
痕迹:
xss Array
save: [null,null,null,null]
[ [Function: notify],
[Function: notify],
[Function: notify],
[Function: notify] ]
object
[Function: Array]
Array
4
TypeError: Cannot read property 'length' of undefined
at xssObjectEscape (/var/www/smq/services/secure/xss.js:30:39)
at xssObjectEscape (/var/www/smq/services/secure/xss.js:34:7)
at xssObjectEscape (/var/www/smq/services/secure/xss.js:34:7)
at xssObjectEscape (/var/www/smq/services/secure/xss.js:34:7)
at xss (/var/www/smq/services/secure/xss.js:5:12)
at filter.user.then (/var/www/smq/handlers/session.js:29:21)
at process._tickCallback (internal/process/next_tick.js:103:7)
Run Code Online (Sandbox Code Playgroud)
知道为什么会发生这种情况吗?
for(let i = 0 ; i < object[prop].length ; i++){
object[prop] = xss(object[prop][i]);
}
Run Code Online (Sandbox Code Playgroud)
您正在循环中覆盖object[prop]with的值undefined。您可能打算分配给object[prop][i],但您完全覆盖了在object[prop]使用从undefined返回xss。
下一个循环迭代测试停止条件i < object[prop].length,并引发异常。您的所有日志记录都无济于事,因为您在错误的时间进行了操作。你应该检查的价值object[prop] 在循环中覆盖它后,。
请注意,您可能应该只使用map而不是for循环:
object[prop] = object[prop].map(xss)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |