在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__
,因为有人试图破坏我的软件。我知道这种情况绝对罕见,但我不喜欢它。我不记得我正在使用的编程语言的所有怪癖,所以如果有足够的时间,我一定会编写这种代码。
我为创建不受篡改的代码感到自豪。所以,我试图从我的软件中消除这些针孔。
是的,这些都是超级小调,但至少值得一个StackOverflow问题,看看人们是否有比我知道更好的答案。我通过这种方式学到了很多东西。
答案 0 :(得分:0)
在每个键之前添加一个额外的字符?如果是这样,哪个角色最有意义?我知道它不能成为一个下划线,那么空间呢?
我使用x
,但这是任意的。只要你使用不太可能形成特殊属性名称的东西(如某些引擎上)__proto__
,toString
或valueOf
(我不知道任何特殊属性)以x
开头的名字,你很好。