gpt4 book ai didi

javascript - 使用 JavaScript eval 解析 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 04:26:39 25 4
gpt4 key购买 nike

问题:我正在使用 eval 来解析来 self 的 WebMethods 之一的 JSON 返回值。

我不想添加 jquery-json,因为传输量已经很大了。所以我用eval解析JSON返回值。
现在有传言说这是不安全的。为什么 ?

除非他们入侵我的服务器,否则没有人可以修改 JSOn 返回值,在这种情况下,无论如何我都会遇到更大的问题。

如果他们在本地执行,JavaScript 只会在他们的浏览器中执行。
所以我看不出问题出在哪里。

任何人都可以使用这个具体示例阐明这一点吗?

function OnWebMethodSucceeded(JSONstrWebMethodReturnValue) 
{
var result=eval('(' + JSONstrWebMethodReturnValue + ')')
... // Adding result.xy to a table
}

最佳答案

根本问题是 eval 可以运行任何 JavaScript,而不仅仅是反序列化 JSON 格式的数据。这就是使用它处理来自不受信任或半受信任来源的 JSON 时的风险。将 JSON 包装在括号中的常用技巧不足以确保不执行任意 JavaScript。考虑这个实际上不是的“JSON”:

function(){alert('Hi')})(

如果你把它放在变量 x 中并这样做:

var result = eval("(" + x + ")");

...您会看到一个警报——JavaScript 已运行。安全问题。

如果您的数据来自可信来源(听起来确实如此),我就不会太担心了。也就是说,您可能对 Crockford 的讨论感兴趣 here (Crockford 是 JSON 的发明者,也是一个通晓 JavaScript 的人)。 Crockford 还在 this page 上提供了至少三个公共(public)领域解析器。你可能会考虑使用:他的 json2.js 解析器和字符串化器,缩小后只有 2.5k 大小,但仍然使用 eval(它只是首先采取了一些预防措施);他的 json_parse.js,这是一个不使用 eval 的递归下降解析器;和他的 json_parse_state.js,一个状态机解析器(同样没有使用 eval)。所以你要选择你的毒药。 (向 Camilo Martin 指出最后两个备选方案。)

关于javascript - 使用 JavaScript eval 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2499036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com