【问题标题】:How can I change this the object property assignment to avoid prototype pollution如何更改此对象属性分配以避免原型污染
【发布时间】:2021-08-09 01:46:58
【问题描述】:

我有一行代码看起来像

  gMapping[userName] = gMapping[userName] || [];

我看到了 Snyk 提出的 Prototype 污染漏洞。如何解决?

相关代码:

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);
  }
});

【问题讨论】:

  • 什么是glMappinguserName 来自哪里?您能否更具体地了解 Snyk 警告消息?
  • @Bergi :用户名来自数据库。在问题中添加了有关 gMapping 的详细信息

标签: javascript node.js object security prototype


【解决方案1】:

问题是userName 可能是"__proto__"。我不确定这在您的情况下是否可以利用,但在尝试在 Object.prototype 上调用 .push() 时仍然会导致异常。

对于avoid this issue,要么使用Object.create(null)(不幸的是isn't easy with TypeScript),要么切换到正确的ES6 Map<string, string[]>

【讨论】:

  • 好的,如果我们改变 const gMapping: { [user_name: string]: string[] } = {};到地图而不是对象,没关系,对吗?
  • @SKhurana 是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
相关资源
最近更新 更多