在Java中,我发现将字符串作为
我现在正在使用Node.JS/JavaScript,有一个特殊情况没有处理。
什么是处理__proto__和类似内容的推荐方法?似乎toString没有引起任何问题,但假设我需要一致地处理不受信任的数据。 有什么建议的解决方案吗?
- 在每个键之前加一个额外的字符?如果是这样,哪个字符最合适?我知道它不能是下划线,那空格呢? - 使用一个可以方便且不带过多功能的模块来处理?(一些功能也很好) - 还有其他的解决方案吗?是否有与JSON.parse兼容的解决方案?
为什么这很重要?当然,没有人会意外输入__proto__。 但是如果他们故意这样做呢?他们了解我正在使用JavaScript,那又怎样? - 没有问题,除非出现以下情况:
- 软件具有字符串数组。碰巧其中一个字符串说__proto__,因为有人在试图破坏我的软件。 - 软件使用这些字符串作为键创建Map,并填充Map中的一些不错的数据。 - 软件稍后遍历字符串数组,并从Map中收集信息。 Map返回null,然后发生null指针异常。 - 软件现在无法正常工作。这将被视为某种拒绝服务。
我知道这种情况绝对很少见,但我不喜欢它。 我记不住我正在使用的编程语言的所有怪癖,因此在足够长的时间内,我必须编写这种代码。
我以创建不易受篡改的代码为荣。 因此,我试图从我的软件中消除这些小漏洞。
是的,这些都是超级微小的问题,但至少值得在StackOverflow上提问,看看人们是否有比我更好的答案。 我通过这种方式学到了很多。
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中的一些不错的数据。 - 软件稍后遍历字符串数组,并从Map中收集信息。 Map返回null,然后发生null指针异常。 - 软件现在无法正常工作。这将被视为某种拒绝服务。
我知道这种情况绝对很少见,但我不喜欢它。 我记不住我正在使用的编程语言的所有怪癖,因此在足够长的时间内,我必须编写这种代码。
我以创建不易受篡改的代码为荣。 因此,我试图从我的软件中消除这些小漏洞。
是的,这些都是超级微小的问题,但至少值得在StackOverflow上提问,看看人们是否有比我更好的答案。 我通过这种方式学到了很多。
__proto__
和toString
这样的键的JSON数据。 - T.J. Crowder__proto__
的怪癖 :-) - BergiMap
对象禁用它。这样,我就不会破坏所有其他对象了。 - 700 SoftwareObject.create(null)
)将允许无问题地分配和检索__proto__
属性。 - Bergi