冲突变量初始化¶
ID: js/variable-initialization-conflict
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- reliability
- correctness
- external/cwe/cwe-563
Query suites:
- javascript-security-and-quality.qls
如果在一个变量声明语句中声明并初始化两次变量,第二次初始化会立即覆盖第一次初始化。这在最好的情况下令人困惑,并且可能表明存在底层错误。
建议¶
重命名第二个变量声明以避免冲突。对于变量的每次使用,检查它以找出它指的是第一个声明还是第二个声明。如果它指的是第二个声明,请重命名使用方式。
示例¶
在以下示例中,变量声明语句声明并初始化变量 key
两次,一次为 iter[0]
,另一次为 iter[1]
。第二次初始化覆盖了第一次初始化,因此 key
最终被设置为 iter[1]
。
for (var iter in Iterator(aExtraHeaders)) {
var key = iter[0], key = iter[1];
xhr.setRequestHeader(key, value);
}
从上下文来看,很明显第二个声明是拼写错误:它应该声明并初始化变量 value
,该变量在下一行中被引用。
for (var iter in Iterator(aExtraHeaders)) {
var key = iter[0], value = iter[1];
xhr.setRequestHeader(key, value);
}
参考¶
Ecma International,ECMAScript 语言定义,第 5.1 版,第 12.2 节。ECMA,2011 年。
常见漏洞枚举:CWE-563.