Пароль на страницу. Часть 3. Пароль от базы
DL
24.6.2001
Была у меня в своё время проблема: надо закрыть администрационную часть сайта, но при этом я не могу положить файл .htpasswd выше корневой директории сайта. Врождённая подозрительность не позволяла положить файл с паролем и отдельную директорию и заблокировать доступ к ней по http. Решил попробовать сделать защиту как в phpMyAdmin: у пользователя спрашиваются логин и пароль, с которыми скрипт соединяется с базой. В своём я сделал именно так. Удобство метода в том, что файл можно складывать куда угодно? никаких кук, никаких директив сервера для директории. Заодно, если поменяется пароль в базе данных, не надо ничего исправлять в скрипте.
Распишу метод на примере MySQL.
Пишем функцию, например, mysql_die:
function mysql_die() {
header("HTTP/1.0 401 Unauthorized");
header("WWW-authenticate: basic realm=\"Statistics\"");
print ("Access denied. User name and password required.");
exit();
}
В начале программы указываются хост сервера БД и, если надо, имя базы:
$db_host = "localhost";
$db_name = "somedatabase";
А для соединения с базой берутся переменные сервера: $PHP_AUTH_USER и $PHP_AUTH_PW.
$db_connect = @mysql_connect($db_host, $PHP_AUH_USER, $PHP_AUTH_PW)
or mysql_die();
И всё. Теперь о недостатках. Разумеется, с такой защитой можно пробовать подбирать пароль (в принципе, можно приделать , но тогда потерятеся вся красота метода). Пароль, как и в случае защитой средствами сервера, пересылается в открытом виде. Но для простых задач такое вполне сгодится.
На днях в форуме разгорелась дискуссия, что лучше где применять ? защиту через 401-й код, свои куки или сессии. Я не стал ввязываться, чтобы не растерять красноречия, но в ближайших выпусках опишу в общих чертах последние два метода (а пока рекомендую читать ) [].