PHP в деталях

       

Пароль на страницу. Часть 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-й код, свои куки или сессии. Я не стал ввязываться, чтобы не растерять красноречия, но в ближайших выпусках опишу в общих чертах последние два метода (а пока рекомендую читать ) [].



Содержание раздела