Отправка базовой информации аутентификации через форму

Я работаю над сайтом, который в настоящее время использует базовую систему регистрации диалогового окна аутентификации, то есть тип диалога, который вы получаете, если вы здесь: http://www.dur.ac.uk/vm.boatclub/password/index.php Я не устанавливал эту систему и не в состоянии легко/быстро обойти ее, но она работает. Однако проблема заключается в том, что диалоговое окно не очень полезно сообщать вам, какую регистрационную информацию вы должны использовать (то есть какую комбинацию имени пользователя и пароля), и поэтому я хотел бы заменить ее формой. Я думал, что это невозможно, но я хотел спросить, чтобы узнать.

Можно ли настроить HTML-форму, которая отправляет данные на сервер таким образом, чтобы она принимала его так же, как и при использовании этого диалогового окна? В качестве альтернативы можно ли установить PHP script, который будет принимать нормальные данные формы и обрабатывать его каким-то образом передавая его на сервер, чтобы он регистрировался?

Изменить: после того, как мне сообщили, что это базовая аутентификация, я обошел и сумел найти способ, который работает и постоянно удерживает пользователя. Однако это не работает в Internet Explorer. Решение было просто перенаправить пользователя на: http://username:[email protected]/vm.boatclub/password/index.php Но Internet Explorer удалил его из-за использования фишинга около 3 лет назад. Есть ли способ использовать javascript, чтобы заставить браузер получить доступ к сайту таким образом? Или мне нужно просто изменить свой интерфейс?

Ответы

Ответ 1

После справедливого исследования я нашел способ, который работает как в Chrome, так и в IE, и это все, что я тестировал, но логика кода не предполагает, что он должен сломаться в любом месте. Он основан на этой статье:

http://www.peej.co.uk/articles/http-auth-with-html-forms.html

Это довольно подробно, но суть этого заключается в следующем: в форме submit вы делаете запрос AJAX в базовую аутентифицированную папку. Запросы AJAX могут принимать информацию о имени пользователя и пароле для базового auth и после того, как браузер будет авторизован после авторизации в этой области, то есть он останется включенным. Предыдущая статья делает это в чистом javascript, поэтому добавьте что-то другое, кроме простого объяснения ссылка здесь (надеюсь, довольно прозрачная) реализация с использованием jQuery:

  $(document).ready(function()
  {
    $('#loginForm').submit(function()
    {
      var username = $('#usernameInput').val();
      var password = $('#passwordInput').val();

      $.ajax(
        {
          'password' : password,
          'username' : username,
          'url'      : 'http://www.website.com/basic-auth-file.php',
          'type'     : 'GET',
          'success'  : function(){ window.location = 'http://www.website.com/basic-auth-file.php'; },
          'error'    : function(){ alert('Bad Login Details');},
        }
      );

      return false;
    });
  });

Это достигало того, чего я хотел, и относительно просто понять, однако я бы умолял всех, кто хотел, чтобы это вышло и не знало об основных принципах, чтобы выйти и провести исследование!

Ответ 2

Вы можете заменить его формой. http://www.dur.ac.uk/vm.boatclub/password/index.php использует аутентификацию основного доступа.

аутентификация основного доступа

Что вы можете сделать, это выполнить базовую аутентификацию через curl

<?php 
// HTTP authentication 
$url = "http://www.dur.ac.uk/vm.boatclub/password/index.php"; 
$ch = curl_init();     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");  
$result = curl_exec($ch);  
curl_close($ch);  
//echo $result; 
?> 

Вариант 1

Все прокси-серверы всего лишь echo'ing $result

Вариант 2

Прочитать заголовки от $result, а если код состояния!= 200, то была введена неправильная информация для входа в систему. Пользователь должен ввести форму еще раз. Если код статуса == 200 прав учетных данных введен и вы должны выполнить http-аутентификацию, отправив заголовки.

header("Authorization: Basic " . base64_encode($username . ":" . $password);

Вы не должны эха из любых данных ($ result) перед отправкой заголовка else вы получите сообщение об ошибке

Некоторые быстрые ссылки: