【发布时间】:2011-04-02 06:16:22
【问题描述】:
长话短说:仅在 Chrome 和 Safari 上,登录表单中的值有时会粘贴到用户的 URL 中,即使实际登录是通过 AJAX 发布的。
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>
实际的 POST 请求甚至不包含挑战参数:
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;
有什么想法吗?
【问题讨论】:
-
也许是个愚蠢的问题,但是您提交的表单上有
return false吗? -
作为旁注,你为什么要在这里使用这个复杂的 Ajax 东西?对我来说似乎没有意义,因为无论如何您都在重新加载整个页面。
-
啊,我现在明白了,你正在做一些散列。不过,使用 SSL 和普通的登录表单可能是更安全、更简单的解决方案。
-
SSL 对于相关网站来说太过分了。它最初是用 AJAX 编写的,以避免页面重新加载,即使现在重新加载仅适用于在登录时切换语言的用户(低于 10% 的用户群)。
标签: javascript ajax google-chrome safari url-parameters