我有一行代码看起来像
gMapping[userName] = gMapping[userName] || [];
我看到了Snyk提出的原型污染漏洞。如何解决这一问题?
相关代码:
const gMapping: { [user_name: string]: string[] } = {};
// Map records to dictionaries
dbRecs.forEach(rec => {
const userName = rec.user_name;
const groupId = rec.group_id;
gMapping[userName] = gMapping[userName] || [];
gMapping[userName].push(groupId);
}
});
问题是userName
可能是"__proto__"
。我不确定这在您的情况下是否可以利用,但当尝试在Object.prototype
上调用.push()
时,它仍然会导致异常。
为了避免这个问题,可以使用Object.create(null)
(不幸的是,使用TypeScript并不容易(,也可以切换到适当的ES6Map<string, string[]>
。