serializeArray 在传递给 eval 之前是否对输入进行清理?
Does serializeArray sanitize input before being passed to eval?
出于好奇,因为 eval 是 "evil"。序列化数组可以防止 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”数据,并将posted 到服务器 (example.com)。
服务器将返回一些数据,现在轮到您 "do some logic" 处理数据了。根据服务器的不同,响应将是字符串、json 或其他数据格式。在这一点上,我很困惑地看到 eval 调用 with.
eval('(' + data + ')');
这不是您通常处理服务器数据的方式,问题是您是否信任服务器数据来明确评估它。
说最好只从服务器传递数据并接收它,例如JSON 并查看数据。
库通常会处理 JSON 解析,您可以访问数据并对其进行迭代,就像在 javascript 中迭代 object/array 一样。由于您使用的是 JQuery 我会阅读 $.post 的文档并检查浏览器开发工具中的服务器响应。
出于好奇,因为 eval 是 "evil"。序列化数组可以防止 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”数据,并将posted 到服务器 (example.com)。
服务器将返回一些数据,现在轮到您 "do some logic" 处理数据了。根据服务器的不同,响应将是字符串、json 或其他数据格式。在这一点上,我很困惑地看到 eval 调用 with.
eval('(' + data + ')');
这不是您通常处理服务器数据的方式,问题是您是否信任服务器数据来明确评估它。
说最好只从服务器传递数据并接收它,例如JSON 并查看数据。
库通常会处理 JSON 解析,您可以访问数据并对其进行迭代,就像在 javascript 中迭代 object/array 一样。由于您使用的是 JQuery 我会阅读 $.post 的文档并检查浏览器开发工具中的服务器响应。