【问题标题】:String of Array (not JSON) parsed with eval() - How to secure?用 eval() 解析的数组字符串(不是 JSON) - 如何保护?
【发布时间】:2018-11-16 02:55:03
【问题描述】:

我正在通过 http 请求接收包含对象的数组字符串。我用 eval() 解析它。

所以我显然期待解析后的数组 obj。除了if (Array.isArray(parsedObj)) ...

,我如何保护这个 eval() 过程

还有比 eval() 更好的方法吗?

这是字符串的一部分(注意它不是 JSON):

    [
        ["2018-06-06", "2018-06-07", "2018-06-08", "2018-06-09", "2018-06-10", "2018-06-11", "2018-06-12", "2018-06-13", "2018-06-14", "2018-06-15", "2018-06-16"], 
        {
            "2018-06-10": {
                checkFirstOrLastOfMonth: 0,
                day: "10",
                dayOfWeek: "SONNTAG",
                formatedDate: "10 Jun 2018",
                monthNo: "06",
                shortMonthName: "Jun",
                weekOfYear: 24,
                year: "2018"
            },
            "2018-06-11": {
                checkFirstOrLastOfMonth: 0,
                day: "11",
                dayOfWeek: "MONTAG",
                formatedDate: "11 Jun 2018",
                monthNo: "06",
                shortMonthName: "Jun",
                weekOfYear: 24,
                year: "2018"
            },
            "2018-06-09": {
                checkFirstOrLastOfMonth: 0,
                day: "09",
                dayOfWeek: "SAMSTAG",
                formatedDate: "09 Jun 2018",
                monthNo: "06",
                shortMonthName: "Jun",
                weekOfYear: 23,
                year: "2018"
            },
    ...

【问题讨论】:

  • 永远不要使用eval。然后编写你自己的解析器。
  • 为什么不让它成为有效的 JSON?修复 HTTP API。
  • 检查最外层表达式的类型 after 解析并没有使任何东西更 secure
  • @Beri:修复 API 不在我手上,不好意思……

标签: javascript json node.js security parsing


【解决方案1】:

使用https://www.npmjs.com/package/json5代替eval()

将像该字符串这样轻松的 JSON 解析为 js obj/arr

npm install json5 --save

_

const JSON5 = require('json5');

let obj = JSON5.parse(obj_str);

【讨论】:

  • JSON5 提供了 JSON 中不可能的扩展规则集。例如。一个数字可以是 NaN。这是可取的吗?有多个包以更松散的方式解析 JSON,但不做任何增强,例如 npmjs.com/package/loose-json
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多