Javascript 序列化数组在传递给eval之前是否对输入进行清理?

Javascript 序列化数组在传递给eval之前是否对输入进行清理?,javascript,jquery,ajax,eval,serializearray,Javascript,Jquery,Ajax,Eval,Serializearray,出于好奇,因为eval是“邪恶的”。序列化数组是否可以防止xxs攻击?据我所知,serializeArray()方法创建了一个对象的JavaScript数组,可以作为JSON字符串进行编码。如果是这样的话,有什么更好的方法来评估数据 var formdata = $('#form').serializeArray(); $.post('https://www.example.com', formdata, function(data) { if(data) { var buff

出于好奇,因为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
    }
});

变量formdata将包含作为数组的“#form”数据,并将发布到服务器(example.com)

服务器将响应一些数据,现在轮到您对数据“执行一些逻辑”。根据服务器的不同,响应将是字符串、json或其他数据格式。在这一点上,我很困惑地看到eval调用

eval('(' + data + ')');
这不是您通常处理服务器数据的方式,问题是您是否信任服务器的数据来明确地评估它

他说,最好只从服务器传递数据,然后以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
    }
});

库通常会处理JSON解析,您可以访问数据并进行迭代,就像在javascript中迭代对象/数组一样。由于您使用的是JQuery,我将阅读$.post的文档,并检查浏览器开发工具中的服务器响应。

formdata
data
是独立的实体。你只是盲目地评估你从服务器得到的东西,所以不,这里没有保护。谢谢,这就是我想确定的。在旧代码中发现了这一点,这让我很好奇。eval调用只是添加了所有错误,并在引导toast消息中显示它们。否则它只是提交表单。我在旧代码中发现了这一点,因为我认为这可能很糟糕。