Ste*_*ger 7 javascript security json eval
问题:我正在使用eval来解析我的一个WebMethods的JSON返回值.
我不想添加jquery-json,因为传输量已经非常大了.所以我用eval解析JSON返回值.
现在谣言说这是不安全的.为什么?
除非他们破解我的服务器,否则没有人可以修改JSOn返回值,在这种情况下,无论如何我都会遇到更大的问题.
如果他们在本地执行,JavaScript只会在他们的浏览器中执行.
所以我没有看到问题出在哪里.
使用这个具体的例子,任何人都可以对此有所了解吗?
function OnWebMethodSucceeded(JSONstrWebMethodReturnValue)
{
var result=eval('(' + JSONstrWebMethodReturnValue + ')')
... // Adding result.xy to a table
}
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 14
根本问题是eval
可以运行任何JavaScript,而不仅仅是反序列化JSON格式的数据.使用它来处理来自不受信任或半可信来源的JSON时存在风险.将JSON包装在括号中的常见技巧不足以确保不执行任意JavaScript.考虑这个"JSON",它实际上不是:
function(){alert('Hi')})(
Run Code Online (Sandbox Code Playgroud)
如果你在变量x
中有这个并做了这个:
var result = eval("(" + x + ")");
Run Code Online (Sandbox Code Playgroud)
...你会看到警报 - JavaScript运行了.安全问题.
如果您的数据来自可靠来源(听起来像是这样),我不会太担心它.也就是说,你可能对Crockford 在这里的讨论感兴趣(Crockford是JSON的发明者和一个知识渊博的JavaScript人物).Crockford还在你可能考虑使用的这个页面上提供了至少三个公共域解析器:他的json2.js解析器和字符串化器,它们在缩小时只有2.5k大小,但仍然使用eval
(它只需要几个预防措施); 他的json_parse.js,这是一个不使用的递归下降解析器eval
; 和他的json_parse_state.js,状态机解析器(再次不使用eval
).所以你可以选择你的毒药.(向Camilo Martin大声说出最后两个选择.)