使用JavaScript安全地评估电子表格。可能吗?

时间:2013-04-20 11:27:54

标签: javascript json security eval spreadsheet

我正在考虑使用JSON和JavaScript创建电子表格。这实际上是关于JavaScript的理论问题。

在某些情况下,当您使用单个函数生成整列时,它会更有用。就像在这个例子中一样:

{
    "type": "jsheet",
    "version": "1",
    "author": "John Doe",
    "title": "Example Spreadsheet",
    "groups":
    [
        {
            "name": "Document Information",
            "columns":
            [
                {
                    "name": "Title",
                    "rows": [
                        "_.title"
                    ]
                },
                {
                    "name": "Author",
                    "rows": [
                        "_.author"
                    ]
                }
            ]
        }
        {
            "name": "Numbers 1-10",
            "columns":
            [
                {
                    "name": "Even numbers",
                    "rows": "_.range(1,10).evens()"
                },
                {
                    "name": "Odd numbers",
                    "rows": "_.range(1,10).odds()"
                }
            ]
        }
    ]
}

当您只使用来自受信任来源的代码并且仅在您的计算机上工作时,这似乎完全没问题。但想想像Google云端硬盘这样的云端服务。如果用户粘贴不安全的代码或打开不安全的电子表格,他们可能会遇到危险。例如,脚本可以操作DOM,甚至可以访问cookie,执行请求等。有没有办法安全地防止这种情况发生,而无需实现自定义JavaScript解析器?

编辑Kenneth的回答: 当然,我不打算使用eval()来解析文档本身。我只考虑使用eval()或文档中定义的函数来计算表达式。考虑使用这一行脚本指定整列的可能性:_.range(1,10).evens()_.range(10,200).filter(isprime)。其中_是一个对象,它具有返回另一个具有类似方法的对象的方法。就像jQuery和d3中的链一样。

1 个答案:

答案 0 :(得分:1)

如果您使用JSON.parse,则没有问题。

当然,如果您使用eval(),那么一切皆有可能。