JavaScript对象与地图-如何处理特殊键
JavaScript Object vs Map - how to handle special keys?
在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
- 软件稍后会遍历字符串数组,并从Map中收集信息。Map返回一些null,然后boom:null指针异常
- 软件现在不起作用。这有点像拒绝服务
我知道这种情况非常罕见,但我不喜欢。我记不清我使用的编程语言的所有怪癖,所以如果有足够的时间,我一定会写这种代码。
我为创建不受篡改的代码而自豪。所以,我正试图从我的软件中消除这些针孔。
是的,这些都是非常次要的,但至少值得问一个StackOverflow问题,看看人们是否有比我知道的更好的答案。我通过这种方式学到了很多。
在每一个键之前准备一个额外的字符?如果是,什么角色最有意义?我知道它不能是下划线,那么空格呢?
我使用x
,但它是任意的。只要你使用了一些不太可能形成特殊属性名称的东西,比如(在某些引擎上)__proto__
、toString
或valueOf
(我不知道有任何以x
开头的特殊属性名称),你就可以了。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 在 AJAX 完成之前,不要让其他处理程序处理
- jQuery DataTable + sAjaxSource + Spring (服务器端处理) 处理
- 如何在node.js中处理未处理的异常
- Node.js错误处理——如何处理导致错误的未定义值
- RegEx在VBA和JavaScript中的处理方式有何不同?
- 在chrome中没有正确处理windowClosing处理程序
- 窗口.onerror不能在移动设备上工作——我应该如何处理未处理的异常
- 串行地处理异步处理的消息队列
- 如何通过错误处理来处理Ajax请求并检测整体完成情况