首页 > 解决方案 > 表单提交时出现额外的查询字符串参数

问题描述

我注意到,当执行POST来自某些站点的请求时,它会传递我的表单数据(正常)和查询字符串中的一些额外参数。这些额外的参数不是来自隐藏的表单输入,而且看起来有些随机。例如,如果您访问美国航空公司的主页并单击搜索按钮,它会发送一个POST request to /find-flights带有额外表单数据键X-6LdxA4pr-uniqueStateKey, X-6LdxA4pr-b, X-6LdxA4pr-c, X-6LdxA4pr-d, and X-6LdxA4pr-a.的脚本代码,负责此操作的脚本代码似乎已被渲染为不可读,并且位于页面的开头。

这怎么可能?我认为表单数据仅在提交时从表单元素生成。我试图找到详细说明查询字符串是如何生成的文档,但没有什么可以解释这些额外的参数。它们似乎是本地生成的,因为在按下按钮和 POST 请求之间没有请求。

标签: javascripthtmlfrontend

解决方案


奇怪的是这些额外的参数是从页面的 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
}


推荐阅读