如何修复 codacy 警报“通用对象注入接收器”

Nic*_*.Xu 2 javascript codacy

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

我怎么能骗过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)
Run Code Online (Sandbox Code Playgroud)

小智 12

您只需要将索引解析为整数

activeIndexObj[parseInt(index)] = newVal
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,这会带来类型脚本错误:TS2345:“数字”类型的参数不能分配给“字符串”类型的参数。我的索引是数字类型,但抛出安全错误。 (4认同)

ped*_*o91 0

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

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

如果您不想了解此问题,可以忽略 codacy UI 中的问题:https ://support.codacy.com/hc/en-us/articles/207279979-Issues#2-remove-pattern