Frage

Lange Rede kurzer Sinn:. Auf Chrome und Safari nur, Werte aus einem Login-Formular sind manchmal Einfügen in den URL-Adresse des Benutzers, obwohl die eigentliche Anmeldung erfolgt POSTed über AJAX

http://my-site.example/?name=user&pw=xxx&challenge=b1be8ad7aac242...

Es wurde wiederholt berichtet, und ich habe es passieren, selbst gesehen, aber nicht gelungen, es selbst zu reproduzieren, viel weniger herauszufinden, was auf der Erde vor sich geht. Hier ist, was das Login-Formular läuft darauf hinaus:

<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>

Die tatsächliche POSTED Anfrage nicht einmal die Herausforderung Parameter enthalten:

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);
}

Und auf dem erfolgreichen Anmeldung wird der Benutzer wieder auf die gleiche Seite umgeleitet (= nachladen gezwungen), wenn und nur wenn sie eine andere Spracheinstellung von der Standardeinstellung haben:

location.href = "http://" + location.host + location.pathname;

Irgendwelche Ideen?

War es hilfreich?

Lösung

Iin die Fälle, die Sie beschreiben, tatsächlich das Formular geschrieben wird, wahrscheinlich, weil der Benutzer Javascript deaktiviert oder ein Skriptfehler tritt in xmlhttpPost.

Das Formular wird als GET Anfrage in einigen Browsern, weil Sie eine method Eigenschaft nicht angeben geschickt bekommen. (Ich denke, GET ist der richtige Standard pro Standard, aber einige Browser weichen von diesem). Somit werden die Formulardaten in der URL am Ende.

Geben Sie das Formular ein method="POST". Das wird die Passwortdaten in URLs Teil beheben

Andere Tipps

Sie wissen, was ich am meisten hasse über Stack-Überlauf? Die Tatsache, dass, indem Sie auch Ihre schwierigsten Probleme in so einfach auslegen und eine Form wie möglich reduziert, stoßen Sie oft in die Lösungen selbst, in der Regel etwa 5 Sekunden nach dem Absenden.

Dieses Mal stellt sich heraus, dass ENTER verursache Safari / Chrome (Webkit), um das Formular abschicken und die Parameter in der URL-Stick. Die Heilung war einfach:

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

Und ein Tipp o‘der Hut hier:

Wie kann ich WebKit Browser verhindern, dass ein Formular abzusenden, wenn enter in einem Eingangs

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top