在 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
不会造成任何麻烦,但假设我需要一致地处理不受信任的数据。推荐的解决方案是什么?
- 在每个键之前添加一个额外的字符?如果是这样,哪个角色最有意义?我知道它不能是下划线,那么空格呢?
- 使用一个为我处理这个的模块?我想要一个可以方便地处理这个并且没有过多功能的人。(虽然有些功能会很好)
- 还有什么?有没有兼容的解决方案
JSON.parse
?
为什么这很重要?当然,实际上没有人会__proto__
意外地打字。但是,如果他们是故意这样做的。他们知道我在使用 JavaScript,那又怎样?- 除以下情况外没有问题:
- 软件有一个字符串数组。碰巧这些字符串中的一个说
__proto__
是因为有人试图破坏我的软件。 - 软件使用这些字符串作为键创建地图,并用一些不错的数据填充地图。
- 软件稍后会遍历字符串数组,并从 Map 中收集信息。Map 返回一些空值,然后是繁荣:空指针异常。
- 软件现在不起作用。这相当于拒绝服务。
我知道这种情况非常罕见,但我不喜欢它。我不记得我正在使用的编程语言的所有怪癖,所以如果有足够的时间,我一定会编写这种代码。
我以创建不受篡改的代码而自豪。所以,我试图从我的软件中消除这些针孔。
是的,这些都是非常次要的,但至少值得一个 StackOverflow 问题,看看人们是否有比我知道的更好的答案。我通过这种方式学到了很多东西。