質問

長い話の短い: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;'>

そして、ここの帽子のヒント:

入力で入力されたときにWebKitブラウザがフォームを送信するのを防ぐにはどうすればよいですか

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top