Safari和Chrome向URL添加表单值
-
30-09-2019 - |
题
长话短说:仅在Chrome和Safari上,登录表格的值是 有时 即使实际登录通过AJAX发布,也粘贴到用户的URL中。
http://my-site.example/?name=user&pw=xxx&challenge=b1be8ad7aac242...
它已经反复报道,我已经看到它自己发生了,但是我自己无法重现它,更不用说弄清楚地球正在发生了什么。这是登录表格归结为:
<form name="login">
<input type="Text" name="name">
<input type="password" name="pw">
<input type="hidden" name="challenge">
<input type="button" onclick='JavaScript:xmlhttpPost("/php/login.php")'>
</form>
实际发布的请求甚至不包含挑战参数:
function xmlhttpPost(strURL) {
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
...
query = 'name=' + encodeURIComponent(name) + '&pw=' + encodeURIComponent(hash) + '&lpw=' + encodeURIComponent(legacy_hash);
self.xmlHttpReq.send(query);
}
并且在成功的登录中,当且仅当他们与默认设置不同的语言设置时,用户被重定向到同一页面(=被迫重新加载):
location.href = "http://" + location.host + location.pathname;
有任何想法吗?
解决方案
在您描述的情况下,表格实际上发布了,可能是因为用户已关闭JavaScript或脚本错误在 xmlhttpPost
.
表格将作为一个 GET
在某些浏览器中请求,因为您没有指定 method
财产。 (我认为 GET
是根据标准的正确默认值,但有些浏览器偏离了此。因此,表单数据将最终出现在URL中。
给出表格 method="POST"
: :这将在URL部分中修复密码数据。
其他提示
您知道我最讨厌堆栈溢出吗?事实是,通过使您甚至在尽可能简单和减少的形式中提出最棘手的问题,您通常会自己偶然发现解决方案,通常在提交后约5秒钟。
这次,事实证明,按Enter导致Safari/Chrome(WebKit)提交表单并将参数贴在URL中。治疗很简单:
<form name="login" onSubmit='JavaScript:return false;'>
还有一顶帽子在这里:
不隶属于 StackOverflow