serializeArray在传递给eval之前是否会对输入进行消毒?

问题描述 投票:0回答:1

出于好奇,因为eval是 "邪恶 "的。序列化一个数组可以防止xxs攻击吗?根据我的理解,serializeArray()方法创建了一个对象的JavaScript数组,并准备将其编码为JSON字符串。如果是这样,有什么更好的方法来评估数据。

var formdata = $('#form').serializeArray();
$.post('https://www.example.com', formdata, function(data) {
    if(data) {
     var buffer = eval('(' + data + ')');
     // do some logic to check for errors
    } else {
      // sumbit the form
    }
});
javascript jquery ajax eval serializearray
1个回答
1
投票

变量formdata将包含 "#form "数据作为一个数组,并将被发布到服务器(example.com)。

服务器将响应一些数据,现在轮到你在数据上 "做一些逻辑 "了。根据服务器的不同,响应将是一个字符串,json或其他数据格式。在这一点上,我很困惑地看到eval调用与。

eval('(' + data + ')');

这不是你通常处理服务器的数据的方式,问题是你是否信任服务器的数据,要朴素地评价它。

说,这是一个更好的想法,只从服务器传递数据,并接收它作为例如JSON和去过数据。

通常情况下,库会处理JSON解析,你可以访问数据,并像在javascript中迭代一个objectarray一样迭代数据。由于你使用的是JQuery,我会阅读$.post的文档,并在Browsers Dev Tools中检查服务器的响应。

© www.soinside.com 2019 - 2024. All rights reserved.