3

在 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 问题,看看人们是否有比我知道的更好的答案。我通过这种方式学到了很多东西。

4

1 回答 1

0

在每个键之前添加一个额外的字符?如果是这样,哪个角色最有意义?我知道它不能是下划线,那么空格呢?

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

于 2013-02-06T21:42:48.443 回答