【问题标题】:how to fix codacy alert "Generic Object Injection Sink"如何修复 codacy 警报“通用对象注入接收器”
【发布时间】:2019-01-13 21:14:09
【问题描述】:

下面是我的代码。我不认为有任何问题。

我怎样才能愚弄 codacy?如果我不能使用obj[key],那么这到底是什么东西?我无法避免[]

handleClick = (e, titleProps) => {
     const { index } = titleProps
     const newVal = this.state.activeIndexObj[index]? false: true
     let activeIndexObj = {...this.state.activeIndexObj}
     activeIndexObj[index] = newVal
     // Generic Object Injection Sink (security/detect-object-injection)

【问题讨论】:

标签: javascript codacy


【解决方案1】:

你只需要将索引解析成整数

activeIndexObj[parseInt(index)] = newVal

黑客可能会注入函数或原型链,这就是出现此安全错误的原因。

【讨论】:

  • 你太棒了!好主意
  • 不幸的是,这带来了类型脚本错误:TS2345:“数字”类型的参数不可分配给“字符串”类型的参数。我的索引是 number 类型的,但是抛出了安全错误。
【解决方案2】:

@luca (Why is it bad pratice calling an array index with a variable?) 在评论中链接的问题解释了使用变量访问数组索引的问题。这是一个安全问题。

如果您允许将未经验证的输入用作数组索引,您的应用程序可能会崩溃。即使您验证了索引,重构代码并跳过验证也只是时间问题。因此建议避免使用此类代码。一种推荐的解决方案是使用地图:https://stackoverflow.com/a/44882765/4398050

如果你不想知道这个问题,可以忽略代码用户界面中的问题:https://support.codacy.com/hc/en-us/articles/207279979-Issues#2-remove-pattern

【讨论】:

  • “为什么用变量调用数组索引是不好的做法”中的答案根本没有意义。我认为答案是错误的。
  • 好吧,在 codacy UI 中有解释问题的链接,你自己看看:github.com/nodesecurity/…
猜你喜欢
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多