私は今、奇妙なバグを持っています。私はサーバの出力から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;
}
トレース:
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)
任意のアイデアなぜこれが起こる可能性があり、コードと以下のトレースを参照してください?
が、私はこのようなような愚かな事を知っていた参照してください。乾杯! –