【问题标题】:How to resolve eslint "Generic Object Injection Sink" error?如何解决 eslint“通用对象注入接收器”错误?
【发布时间】:2018-12-18 18:51:40
【问题描述】:

我正在尝试读取 JSON 数组。每次我尝试通过像这样传递 JSON 对象键来读取数组/值时-

json[key]

它显示了一个 Eslint 错误-

[eslint] Generic Object Injection Sink (security/detect-object-injection)

我理解这是一个安全警告,因为密钥可能不存在。但是我该如何解决这个警告?有没有更简单的方法来读取 Json 对象。我的计划是将“密钥”传递给函数并根据密钥读取json。

【问题讨论】:

  • 来自自述文件:“这个项目将有助于识别潜在的安全热点,但会发现很多误报,需要人工进行分类。”我把它读作“你不应该把它们都修好”。
  • 那么禁用此规则?
  • 有时需要,当可能涉及到外包(如用户输入)时。在此处查看@viveksharma 的答案:stackoverflow.com/a/55701580
  • 这篇文章解释了为什么它可能是一个安全问题:github.com/nodesecurity/eslint-plugin-security/blob/master/docs/… 在我看来,当你(确定你)不使用key的用户输入时,你可以eslint-disable

标签: javascript json node.js eslint


【解决方案1】:

您正在搜索 ES lint 错误修复:

这是它的语法

json [`${key}`]

例子:

const obj = { 
    eventName: 'Music event', 
    landingPic: 'landing.jpg',
    eventPic0: 'pic0.jpg',
    eventPic1: 'pic1.jpg',
    eventPic2: 'pic2.jpg',
    eventPic3: 'pic3.jpg',
    artist: 'Elie'
};

// array of keys which need to  be read
const arrayOfKey = ['landingPic', 'eventPic0', 'eventPic1',  'eventPic2',  'eventPic3'];

// let's read the value by a key in array
arrayOfKey.forEach( key => {
    const value = obj[`${key}`];
    console.log(value);
});

【讨论】:

  • 这可能会修复 ES Lint 错误,但这是一个安全问题。这对那个问题有帮助吗???
  • 显然,第 12 行 (const arrayOfKey ...) 是允许键的 whilelist。所以是的,它有助于解决安全问题。
  • 不错。这也会将键的值转换为字符串。
【解决方案2】:

它想说的是使用这个符号:

  • 您甚至可以修改被认为是危险的对象的原型属性
  • 通过修改所有内容,您还可以修改构造函数(方法/函数),使其可以被注入然后被利用。

这里对主题进行了分析性描述,并提供了一个简单的示例:

https://web.archive.org/web/20150430062816/https://blog.liftsecurity.io/2015/01/15/the-dangers-of-square-bracket-notation

【讨论】:

    【解决方案3】:

    不确定原因,但是对访问参数进行类型转换可以消除错误。猜测这与卫生设施能够防止污染有关。

    const myThing = myObj[String(key)]
    const myThing = myObj[key as string]
    

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 2019-01-13
      • 2011-04-20
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多