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之前是否会对输入进行消毒?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP PDO 在 SQL 中将多行传递给 UDF

如何将 textarea 的格式化文本传递给其他 php 页面?

如何从 Javascript 提示框中获取值并将其传递给 PHP 变量以便能够保存在 SQL 中?

将php数组传递给jquery函数

在传递给Postgres之前使用Postgres默认值或生成它们是更好的做法吗?

将PHP变量传递给jQuery函数