javascript - 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 中迭代对象/数组一样。由于您使用的是 JQuery,我会阅读 $.post 的文档并检查浏览器开发工具中的服务器响应。
推荐阅读
- xml - 另一个CDATA中的xml请求CDATA如何转义
- node.js - 如何从 lambda 过早返回
- spring-boot - 如何在 Spring Kafka 2.2.9.RELEASE 中将 Retry Tempate (backOffPolicy) 与 AfterRollbackProcessor 一起使用
- ionic4 - 如何使用 duallKnobs 检测 ionic 4 ion-range 中哪个旋钮发生了变化?
- python - 如何在一行中从多个模块导入变量?
- c# - c#从当前表单按钮单击打开另一个表单
- php - 如何使用 Apache 和 MySQL 处理同时请求
- azure-devops - 当我尝试将 sonarqube 与 azure devops 构建管道连接时出现以下错误
- javascript - Javascript 文本框验证 RegEx - 多个整数 (0 <= int <= 500),仅用单个空格分隔
- alpha-vantage - 符号有数字时出现 Alpha Vantage 错误