表单提交中出现了额外的查询字符串参数

时间:2019-10-09 13:38:46

标签: javascript html frontend

我注意到,当从某些站点执行POST请求时,该请求将传递我的表单数据(正常)和查询字符串中的一些额外参数。这些额外的参数不是来自隐藏的形式输入,而是看起来有些随机。例如,如果您转到美国航空首页并单击搜索按钮,它将发送一个POST request to /find-flights以及额外的表单数据键X-6LdxA4pr-uniqueStateKey, X-6LdxA4pr-b, X-6LdxA4pr-c, X-6LdxA4pr-d, and X-6LdxA4pr-a.,导致此问题的脚本代码似乎变得不可读,并且在页面的开头。

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

1 个答案:

答案 0 :(得分:1)

奇怪的是,这些附加参数是从页面的Javascript生成的。我认为这些密钥用于安全性或作为会话的唯一标识符。很难说,而无需访问源代码。

脚本不可读的原因很可能是因为脚本被混淆和缩小了(更多信息here)。

编辑:伪代码以解决评论:

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
}