Отправка базовой информации аутентификации через форму
Я работаю над сайтом, который в настоящее время использует базовую систему регистрации диалогового окна аутентификации, то есть тип диалога, который вы получаете, если вы здесь: 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 вы получите сообщение об ошибке
Некоторые быстрые ссылки: