Safari и Chrome добавляют значения формы в URL - PullRequest
1 голос
/ 22 августа 2010

Короче говоря: только в Chrome и Safari значения из формы входа в систему иногда вставляются в URL пользователя, даже если фактический вход в систему осуществляется через AJAX.

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;

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 22 августа 2010

В описанных вами случаях форма действительно публикуется, возможно, потому, что у пользователя отключен Javascript или в xmlhttpPost.

возникает ошибка сценария. Форма будет отправлена ​​как запрос GETв некоторых браузерах, потому что вы не указываете свойство method.(Я думаю, GET является правильным по умолчанию в соответствии со стандартом, но некоторые браузеры отклоняются от этого).Таким образом, данные формы окажутся в URL.

Дайте форме method="POST": это исправит данные пароля в части URL.

1 голос
/ 22 августа 2010

Вы знаете, что я больше всего ненавижу в переполнении стека? Тот факт, что, заставляя вас излагать даже самые сложные проблемы в максимально простой и сокращенной форме, вы часто сталкиваетесь с решениями самостоятельно, обычно через 5 секунд после отправки.

На этот раз оказывается, что нажатие клавиши ВВОД заставило Safari / Chrome (Webkit) отправить форму и вставить параметры в URL. Лечение было простым:

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

И совет здесь:

Как запретить браузеру WebKit отправлять форму при нажатии клавиши ввода во входе

...