javascript - 表单提交时出现额外的查询字符串参数
问题描述
我注意到,当执行POST
来自某些站点的请求时,它会传递我的表单数据(正常)和查询字符串中的一些额外参数。这些额外的参数不是来自隐藏的表单输入,而且看起来有些随机。例如,如果您访问美国航空公司的主页并单击搜索按钮,它会发送一个POST request to /find-flights
带有额外表单数据键X-6LdxA4pr-uniqueStateKey, X-6LdxA4pr-b, X-6LdxA4pr-c, X-6LdxA4pr-d, and X-6LdxA4pr-a.
的脚本代码,负责此操作的脚本代码似乎已被渲染为不可读,并且位于页面的开头。
这怎么可能?我认为表单数据仅在提交时从表单元素生成。我试图找到详细说明查询字符串是如何生成的文档,但没有什么可以解释这些额外的参数。它们似乎是本地生成的,因为在按下按钮和 POST 请求之间没有请求。
解决方案
奇怪的是这些额外的参数是从页面的 Javascript 生成的。我认为这些密钥用于安全性或作为会话的唯一标识符。很难说没有访问源代码。
脚本不可读的原因可能是因为它被混淆和缩小(更多信息在这里)。
编辑:伪代码来解决评论:
form.onsubmit = function(event) {
event.preventDefault(); //stop the form submission that would send a post request with just form data.
const firstname = form.getElementById("FirstName").value;
const lastname = form.getElementById("LastName").value;
//...etc
let security_token = {
'X-6LdxA4pr': foo,
'X-6:dxA4pr-a': bar,
//...etc
}
let request = new HTTPPostRequest({ //fake class name
firstname,
lastname,
...security_token
})
request.submit(); // send the POST request
}
推荐阅读
- python - 如何在从列表更新路径的for循环中读取多个json?
- swift - 如何使用 Firebase 存储播放视频
- c - 进一步加快 AVX 大矩阵乘法?避免在内循环中存储?
- r - 如何在 cpairs 图中标注颜色
- postgresql - 如何编写忽略无效几何的 PostGIS 更新语句?
- r - 在 R 中,通过添加来自两个不同数据集的变量来拟合多级模式(线性混合效应模型)?
- firebase - Flutter:如何移动 Firebase 节点 - API REST 与 SDK
- html - 如何防止来自不同表格的文本出现在图片 html 电子邮件代码上
- mysql - 如何从单表的 SQL 数据中获取利润损失?
- amazon-web-services - AWS CDK 合成器和不同的 cdk.json 文件