1

簡単に言うと、Chrome と Safari でのみ、実際のログインは AJAX 経由で POST されますが、ログイン フォームの値がユーザーの 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>

実際の 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;

何か案は?

4

2 に答える 2

4

あなたが説明したケースでは、おそらくユーザーが Javascript をオフにしているか、スクリプト エラーが発生したために、フォームが実際に投稿されますxmlhttpPost

GETプロパティを指定しないため、一部のブラウザではフォームがリクエストとして送信されmethodます。(標準では正しいデフォルトだと思いますGETが、一部のブラウザはこれから逸脱しています)。したがって、フォーム データは URL になります。

フォームにmethod="POST": URL 部分のパスワード データを修正します。

于 2010-08-22T11:28:13.310 に答える
1

Stack Overflow で私が一番嫌いなものを知っていますか? 最も扱いにくい問題でさえ、可能な限り単純で縮小された形式でレイアウトすることによって、通常は提出後約 5 秒で、自分で解決策に出くわすことがよくあるという事実。

今回は、Enter キーを押すと、Safari/Chrome (Webkit) がフォームを送信し、パラメーターを URL に貼り付けていたことが判明しました。治療法は簡単でした:

<form name="login" onSubmit='JavaScript:return false;'>

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

入力でEnterキーが押されたときにWebKitブラウザーがフォームを送信しないようにするにはどうすればよいですか

于 2010-08-22T11:29:41.187 に答える