Аутентификация с использованием XMLHTTPRequest - PullRequest
1 голос
/ 28 августа 2011

Как мы все знаем, использование GET метода для входа (или отправки конфиденциальной информации) не рекомендуется.Я хочу создать функциональность входа в систему, используя XMLHTTPRequest.Вот мои шаги:

  1. Пользователь вводит имя пользователя и пароль и нажимает кнопку «Отправить»
  2. Кнопка «Отправить» вызывает XMLHTTPRequest
  3. XMLHTTPRequest отправляет учетные данные на страницу PHP, котораяпроверит это
  4. Если учетные данные верны, тогда создайте сеанс, в противном случае покажите сообщение об ошибке без обновления экрана входа в систему.

Мой вопрос:

Как я могу перенести учетные данные для входа на страницу PHP, используя POST (безопасно)?Если я использую метод open, как показано ниже с GET, то я думаю, что он небезопасен.Могу ли я заменить GET на POST?Если да, то как передать учетные данные?

xmlhttp.open("GET","verifyCredentials.php",true);

Ответы [ 4 ]

2 голосов
/ 28 августа 2011

Для публикации данных с использованием метода POST установите метод в open на POST, установите для поля заголовка запроса Content-Type значение application/x-www-form-urlencoded, соответственно закодируйте свои данные и передайте их в качестве значения параметра send:

xmlhttp.open("POST", "verifyCredentials.php", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(data);

Вы можете использовать функцию encodeURIComponent для кодирования ваших данных:

function formUrlEncoded(params) {
    var data = "";
    for (var name in params) {
        if (!params.hasOwnProperty(name)) continue;
        if (data.length) data += "&";
        data += (encodeURIComponent(name) + "=" + encodeURIComponent(param)).replace(/%20/g, "+");
    }
    return data;
}
var data = formUrlEncoded({"foo":"bar", "baz":"quux"});

Обратите внимание, что при этом данные по-прежнему передаются незащищенными от перехвата.

1 голос
/ 28 августа 2011

Единственное отличие POST и GET заключается в том, что POST отправляет данные в http-теле, а не в URL (заголовки), поэтому оба метода не являются «безопасными» для передачи учетных данных для входа.Как уже упоминалось, вы должны использовать https .

0 голосов
/ 28 августа 2011

Если вы хотите выполнить аутентификацию по небезопасному каналу (вы не используете HTTPS), вы можете использовать протокол входа в систему на основе HMAC .HMAC можно использовать для аутентификации пользователя .

. У меня есть реализация этого в Javascript (клиент) и Python (серверная часть),Вы можете использовать это в качестве примера для начала или найти другую реализацию.Возможно, где-то есть реализация PHP, но вам, вероятно, придется изменить ее для своих нужд.

0 голосов
/ 28 августа 2011

Отправьте md5 паролей в поле пароля.Затем на сервере вы можете еще больше запутать его, если хотите.

...