serializeArray在传递给eval之前是否会对输入进行消毒?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了serializeArray在传递给eval之前是否会对输入进行消毒?相关的知识,希望对你有一定的参考价值。
出于好奇,因为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和去过数据。
通常情况下,库会处理JSON解析,你可以访问数据,并像在javascript中迭代一个objectarray一样迭代数据。由于你使用的是JQuery,我会阅读$.post的文档,并在Browsers Dev Tools中检查服务器的响应。
以上是关于serializeArray在传递给eval之前是否会对输入进行消毒?的主要内容,如果未能解决你的问题,请参考以下文章
从 bash 变量为 Erlang erl 传递 -eval 失败