В то или иное время нам всем приходилось заходить на защищенный паролем веб-сайт. При создании сайта вы можете решить потребовать этого от ваших посетителей по нескольким причинам. Первая и наиболее очевидная — это защита защищенной информации, чтобы ее могли просматривать только немногие избранные. Но вы также можете назначить имена пользователей и пароли случайным посетителям. Это может быть сделано для отслеживания того, кто просматривает ваш сайт, или для предоставления персонализированных опций и услуг вашим посетителям.
Самый простой способ защитить паролем сайт — это использовать HTTP-аутентификацию, при которой, если запрос браузера на защищенную страницу не сопровождается правильными именем пользователя и паролем, веб-сервер отвечает с ошибкой HTTP 401 — что означает «Несанкционированный». Доступ »- и приглашение для браузера повторно отправить запрос с правильным именем пользователя и паролем. С точки зрения пользователя, большая часть этого диалога скрыта. После этого первого неудачного запроса браузер запрашивает у пользователя (в диалоговом окне) имя пользователя и пароль, а затем повторно отправляет запрос, на этот раз с приложенной информацией аутентификации. Предполагая, что комбинация имени пользователя и пароля находится в списке разрешенных пользователей, веб-сервер затем отправляет запрошенную страницу. Веб-браузер также продолжит отправлять это имя пользователя / пароль со всеми последующими запросами.
Наиболее распространенный способ настройки схемы HTTP-аутентификации — использование файла Apache «htaccess» (см. Http://hoohoo.ncsa.uiuc.edu/docs/tutorials/user.html ), но этот метод имеет недостатки. Создание динамического списка авторизованных пользователей (например, чтобы пользователи могли зарегистрироваться и получить немедленный доступ к вашему сайту) может потребовать некоторых довольно извращенных серверных сценариев, которые должны будут манипулировать файлами htaccess для добавления и удаления пользователей. по мере необходимости. И вести любые записи о том, кто имеет доступ к тому, что с использованием каких комбинаций имени пользователя и пароля практически невозможно, используя базовую поддержку HTTP-аутентификации на большинстве веб-серверов.
Введите PHP, бесплатный кроссплатформенный серверный язык сценариев с открытым исходным кодом. При установке в качестве модуля Apache (это не будет работать с версиями CGI и ISAPI), PHP позволяет самостоятельно обрабатывать HTTP-аутентификацию, используя любые средства, которые вам нравятся, чтобы определить, принимать или запрещать доступ к веб-сайту.
С этого момента я предполагаю, что вы знакомы с основами PHP. Если этот язык является новым для вас, или если вам нужен переподготовка, часть 3 моей серии « Создание веб-сайта на основе базы данных » должна помочь вам освоиться.
При установке в качестве модуля Apache PHP предоставляет две специальные глобальные переменные: $PHP_AUTH_USER
$PHP_AUTH_PW
Они содержат имя пользователя и пароль, которые сопровождали текущий HTTP-запрос, соответственно. Используя функцию header()
Давайте рассмотрим пример кода для страницы, которую можно просматривать, только если пользователь вводит имя пользователя "myuser"
"mypass"
<?php
if ($PHP_AUTH_USER != "mysuser"
or $PHP_AUTH_PW != "mypass"):
// Bad or no username/password.
// Send HTTP 401 error to make the
// browser prompt the user.
header("WWW-Authenticate: " .
"Basic realm="Protected Page: " .
"Enter your username and password " .
"for access."");
header("HTTP/1.0 401 Unauthorized");
// Display message if user cancels dialog
?>
<HTML>
<HEAD><TITLE>Authorization Failed</TITLE></HEAD>
<BODY>
<H1>Authorization Failed</H1>
<P>Without a valid username and password,
access to this page cannot be granted.
Please click 'reload' and enter a
username and password when prompted.
</P>
</BODY>
</HTML>
<?php else: ?>
...page contents here...
<?php endif; ?>
Как видите, проверить введенные имя пользователя и пароль так же просто, как проверить переменные $PHP_AUTH_USER
$PHP_AUTH_PW
При обнаружении неправильной комбинации пользователь / пароль вы отвечаете двумя заголовками HTTP (используя функцию header
WWW-Authenticate: Basic realm="Prompt the user here."
HTTP/1.0 401 Unauthorized
Первая строка сообщает веб-браузеру, что должна использоваться обычная аутентификация. Это просто означает, что аутентификация должна выполняться с использованием имени пользователя и пароля. Опция realm позволяет браузеру знать, когда следует использовать определенное имя пользователя / пароль при навигации по группе веб-страниц. Все страницы, которые должны использовать одно и то же имя пользователя / пароль (таким образом, избавляя пользователя от необходимости повторно вводить их для каждой страницы), должны иметь одну и ту же заданную область. Поскольку эта строка отображается в диалоговом окне, предлагающем пользователю, это идеальное место для размещения сообщения (например: «Если вы новый пользователь, введите« гость »в качестве имени пользователя и оставьте пароль пустым».). Обратите внимание, что двойные кавычки в этой строке необходимо экранировать с помощью обратной косой черты, чтобы они не мешали двойным кавычкам, окружающим строку в вашем PHP-коде.
Вторая строка — это стандартный код ответа HTTP, который позволяет браузеру узнать, что введенные имя пользователя / пароль (если они есть) были неправильными, и что пользователю следует предложить ввести их повторно.
Чтобы защитить весь сайт, вы обычно используете функцию include
Недавно я использовал эту технику на сайте, который я создал для небольшой группы людей, работающих над проектом вместе. Я выпустил одну комбинацию имени пользователя и пароля, которая дала им доступ к странице регистрации, где каждая из них создала бы персональную комбинацию имени пользователя и пароля. На странице регистрации эти комбинации будут храниться в базе данных MySQL (дополнительную информацию см. В серии статей « Создание веб-сайта на основе базы данных »). Все остальные страницы на сайте будут затем обращаться к этой базе данных, чтобы определить, разрешено ли заданному сочетанию имени пользователя и пароля доступ к сайту или нет.
Эта и другие творческие возможности, позволяющие сделать вашу систему защиты паролем более гибкой, делают аутентификацию HTTP с использованием PHP чрезвычайно удобным инструментом в вашем арсенале.