Question

Longue histoire courte. Chrome et Safari seulement, les valeurs d'un formulaire de connexion sont parfois collé dans l'URL de l'utilisateur, même si la connexion réelle est transmis via AJAX

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

Il a été signalé à plusieurs reprises et je l'ai vu moi-même se produire, mais ont été incapables de se reproduire moi-même, chiffre beaucoup moins ce que sur la terre qui se passe. Voici ce que le formulaire de connexion se résume à:

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

La demande réelle ne contient affiché même pas le paramètre défi:

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

Et lors de la connexion réussie, l'utilisateur est redirigé vers la même page (= forcé de reload) si et seulement si elles ont un paramètre de langue différente de la valeur par défaut:

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

Toutes les idées?

Était-ce utile?

La solution

Iin les cas que vous décrivez, le formulaire est effectivement affiché, probablement parce que l'utilisateur a désactivé JavaScript ou bien une erreur de script se produit dans xmlhttpPost.

Le formulaire sont envoyés comme une demande de GET dans certains navigateurs parce que vous ne spécifiez pas de propriété method. (Je pense que GET est la valeur par défaut correcte par la norme, mais certains navigateurs diffèrent de ces). Ainsi, les données de formulaire se retrouveront dans l'URL.

Donne la forme d'un method="POST". Cela corrigera les données de mot de passe en partie des URL

Autres conseils

Tu sais ce que je déteste le plus Stack Overflow? Le fait que, en faisant vous disposez même vos la plupart des problèmes difficiles à résoudre en tant que simple et réduit une forme possible, vous souvent trébuchent dans les solutions vous, habituellement environ 5 secondes après la présentation.

Cette fois-ci, il se trouve que en appuyant sur ENTER était à l'origine de soumettre le formulaire et coller les paramètres dans l'URL Safari / Chrome (WebKit). Le remède est simple:

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

Et une pointe o » le chapeau ici:

Comment puis-je empêcher le navigateur WebKit soumettre un formulaire lorsque vous appuyez sur entrez une entrée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top