Я работаю над сайтом, который в настоящее время использует базовую систему регистрации диалогового окна аутентификации, это тип диалога, который вы получаете, если вы здесь: http://www.dur.ac.uk/vm.boatclub/password/index .php Я не устанавливал эту систему и не могу легко или быстро ее обойти, но она работает. Однако проблема заключается в том, что диалоговое окно не очень полезно сообщать вам, какую регистрационную информацию вы должны использовать (то есть какую комбинацию имени пользователя и пароля), и поэтому я хотел бы заменить ее формой. Я думал, что это невозможно, но я хотел спросить, чтобы узнать.
Можно ли настроить HTML-форму, которая отправляет данные на сервер таким образом, чтобы она принимала его так же, как и при использовании этого диалогового окна? В качестве альтернативы можно ли настроить PHP-скрипт, который будет принимать нормальные данные формы и обрабатывать его каким-то образом передавая его на сервер, чтобы он входил в систему?
Изменить: после того, как мне сообщили, что это базовая аутентификация, я обошел и сумел найти способ, который работает, и постоянно удерживает пользователя во включенном состоянии. Однако это не работает в Internet Explorer. Решение было просто перенаправить пользователя на: http: // имя пользователя: пароль@www.dur.ac.uk/vm.boatclub/password/index.php. Но Internet Explorer удалил его из-за использования фишинга около 3 лет назад. Есть ли способ использовать javascript, чтобы заставить браузер получить доступ к сайту таким образом? Или мне нужно просто изменить свой интерфейс?
После справедливого исследования я нашел способ, который работает как в 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; }); });
Это достигало того, чего я хотел, и относительно просто понять, однако я бы умолял всех, кто хотел, чтобы это вышло и не знало об основном ауте, чтобы выйти и провести исследование!
Вы можете заменить его формой. 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; ?>
Прокси-сервер всего лишь echo'ing $result
Чтение заголовков из $result
и код статуса! = 200 введена неверная информация для входа. Пользователь должен ввести форму еще раз. Если введен код состояния == 200 правильных учетных данных, и вы должны выполнить базовую аутентификацию HTTP, отправив заголовки.
header("Authorization: Basic " . base64_encode($username . ":" . $password);
Вы не должны эха из любых данных ($ result) перед отправкой заголовка else вы получите сообщение об ошибке