就其本身而言,这并不是一个坏习惯,因为您确实想开发一个系统并使其安全。很难想象一个系统的安全风险比导致该系统不存在的风险更高。
然而,不允许使用变量来动态创建/使用/更新索引实际上减少了硬编码任何索引的选项,这些索引可以用来引用数组的项目或对象的成员。
不允许索引大大减少了您的选择,以至于它威胁到您可能想要在 Javascript 中创建的任何系统都不存在。让我们看看一些用例:
编号循环:
for (let index = 0; index < arr.length; index++) {
//do whatever with arr[index]
}
当然,while循环也是如此。
在循环中
for (let index in variable) {
//do whatever with arr[index]
}
循环数
for (let item of variable) {
// do whatever with item
}
看
动态查找值
这实际上以准无限多种方式使用,以上所有示例都是这种情况的具体情况。例子:
function getItem(arr, index) {
return arr[index];
}
概括
由于动态索引而对漏洞利用的恐惧,就相当于对流星击中确切位置和确切时间的恐惧。当然,我们不能排除它,但不能一直生活在对低概率的恐惧中灾难。同样,编程也是不可能的,带着不合理的、偏执的恐惧。因此,与其因为存在漏洞利用的可能性而完全拒绝动态索引,我们必须参考可能的实际漏洞利用。如果不允许我们使用动态实例,那么无论我们要开发什么系统,如果它不是那么简单,就不会存在。因此,我们害怕的任何威胁都应该受到保护。
示例:您从数据源检索值并有一个信用卡 IBAN 字段。是的,如果向不是所有者的用户显示,那风险很高。但是您应该通过仅通过外部源使用索引(例如用户浏览器发送的 POST 请求)使 IBAN 不可用来防止这种情况。