如何从URL安全导入JSON对象

时间:2019-01-30 16:18:11

标签: javascript

我正在制作一个名为GopalOS的“网络桌面”(网络桌面),位于以下位置:https://cerebraldatabank.neocities.org/gopalos.html

正如您在源代码中看到的那样,基本的JSON文件系统的结构如下:

{
  "folder": {
    type: "dir",
    content: {
      "config": {
        type: "cfg",
        content: "key=val"
      },
      "program": {
        type: "pgm",
        content() {
          alert("Hello World");
          (v => {alert(v);})("Test Text");
        }
      }
    }
  }
}

不幸的是,由于JSON.parse命令不支持JS函数,因此我需要一种安全的方法来从远程URL 导入JSON对象,而无需运行任何代码。当前代码使用eval(eval为邪恶的情况)。远程网站可能托管着以下恶意文件(来自here):

{
  "name": "Test Program",
  "id": "test-program",
  "app-dir": {
    type: "dir",
    content: {
      "oof": {
        type: "pgm",
        content() {
          msgbox(`Hello world! Your OS version is ${getRef("/version")}`);
        },
        ACE: eval(`document.getElementById("logo").innerHTML = "h4xx0r3d"`)
      }
    }
  }
}

请注意,在解析JSON对象时,eval如何执行ACE键中的代码(表示任意代码执行)。我需要一种安全的方法来将具有上述功能的JSON对象导入GopalOS页面上的JSON对象或变量中,而无需运行任何代码。

1 个答案:

答案 0 :(得分:0)

JSON不支持来自以下位置的函数:https://tools.ietf.org/html/rfc8259

  

JavaScript Object Notation(JSON)是一种轻量级的基于文本的,      语言无关的数据交换格式

JSON是基于文本的格式,也许您可​​以尝试将函数作为字符串发送,然后使用“ eval”执行,例如:

{ myFunction: "function() { alert('hello world'); } " }