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
.
フォームはaとして送信されます GET
aを指定しないため、一部のブラウザでリクエストします method
財産。 (おもう GET
標準ごとに正しいデフォルトですが、一部のブラウザはこれから逸脱しています)。したがって、フォームデータはURLになります。
フォームを与えます method="POST"
: :それは、URLS部品のパスワードデータを修正します。
他のヒント
スタックオーバーフローについて私が最も嫌いなことを知っていますか?最も簡単な問題でさえも簡単にレイアウトし、できるだけフォームを縮小することによって、通常は自分でソリューションにつまずくことが多いという事実は、通常、提出してから約5秒後です。
今回は、Enterを押すとSafari/Chrome(WebKit)がフォームを送信し、URLのパラメーターを貼り付けることがわかりました。治療法はシンプルでした:
<form name="login" onSubmit='JavaScript:return false;'>
そして、ここの帽子のヒント: