gpt4 book ai didi

JavaScript Object vs Map - 如何处理特殊键?

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:55 24 4
gpt4 key购买 nike

在 Java 中,我发现直接获取字符串并将其用作 LinkedHashMap 中的键。我什至可以毫无困难地将它翻译成 JSON 并返回。

我现在在用Node.JS/JavaScript,有一个特例没有处理。

var makesSense = '{"__proto__":"foo","toString":"bar"}'
var noSense = JSON.stringify(JSON.parse('{"__proto__":"foo","toString":"bar"}'))
console.log(noSense) // outputs {"toString":"bar"}

处理 __proto__ 和其他类似内容的推荐方法是什么。 toString 似乎没有造成任何问题,但假设我需要一致地处理不受信任的数据。推荐的解决方案是什么?

  • 在每个键前加一个额外的字符?如果是这样,哪个 Angular 色最有意义?我知道它不能是下划线,那么空格呢?
  • 使用一个模块来为我处理这个问题?我想要一个能够方便地处理这个问题并且没有过多功能的人。 (虽然有些功能会很好)
  • 还有别的吗?是否有与 JSON.parse 兼容的解决方案?

为什么这很重要?肯定没有人会无意中输入 __proto__。但如果他们是故意这样做的呢?他们知道我在使用 JavaScript,那又怎样? - 除以下情况外没有问题:

  • 软件有一个字符串数组。碰巧其中一个字符串说 __proto__ 因为有人四处游荡试图破坏我的软件。
  • 软件使用这些字符串作为键创建一个 Map,并用一些有用的数据填充 Map。
  • 软件随后遍历字符串数组,并从 map 中收集信息。 Map 返回 null,然后 boom:空指针异常。
  • 软件现在无法运行。这相当于拒绝服务。

我知道这种情况非常罕见,但我不喜欢这种情况。我不记得我正在使用的编程语言的所有怪癖,所以如果有足够的时间,我一定会写出这种代码。

我为自己编写的代码不会被篡改而感到自豪。因此,我试图从我的软件中消除这些针孔。

是的,这些都是次要的,但至少值得在 StackOverflow 上提问,看看人们是否有比我知道的更好的答案。我通过这种方式学到了很多东西。

最佳答案

Prepend an extra character before every key? If so, what character makes the most sense? I know it can't be an underscore, so what about a space?

我使用 x,但它是任意的。只要您使用不太可能形成特殊属性名称的东西,例如(在某些引擎上)__proto__,或 toString,或 valueOf(和我不知道有任何以 x 开头的特殊属性名称),你没问题。

关于JavaScript Object vs Map - 如何处理特殊键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com