PHP в деталях



         

Автоматизация авторизации


Это нужно не только для упрощения работы с большим количеством пользователей и их большой "текучкой". Если нужно держать дополнительную информацию о пользователях, либо необходимо гибкое разграничение прав, лучше перенести авторизацию в базу.

Каждая страница закрытой территории подключает файл с вот таким кодом:

$result = mysql_query("SELECT * FROM person WHERE login='". preg_replace("/[^w_-]/","",$PHP_AUTH_USER). "' AND pass='". md5($PHP_AUTH_PW). "'");

if (@mysql_num_rows($result)!=1) {

  header("WWW-Authenticate: Basic realm=\"User area\"");

  header("HTTP/1.0 401 Unauthorized");

  print("Чтобы войти в пользовательскую часть сайта, надо ввести правильные имя и пароль. Если вы забыли пароль, вернитесь обратно и нажмите на ссылку \"забыл пароль\"n");

  exit();

};

$user_row = mysql_fetch_array($result);

В первой строке из логина удаляются все символы кроме букв, цифр, тире и символа подчеркивания. Затем проверяется количество полученных строк, и только если это одна строка, дается доступ. В остальных случаях пользователь увидит в броузере окно, предлагающее ввести логин и пароль. Если же пользователь вошел успешно, в массиве $user_row мы имеем всю информацию о нем.

Конечно же, пример, который я привёл, имеет ряд существенных недостатков. Не переписывайте его один-в-один, чтобы потом не пасть жертвой попыток подбора пароля, потому что

1. защиты от подбора здесь нет

2. если таблица пользователей большая, при подборе пароля злоумышленник, скорее всего, "завалит" базу

Надо будет привести пример. В следующем выпуске по этой теме выложу файлик с кодом.

И последний на сегодня способ ? хранение зашифрованных данных в куках.

Есть скрипт для входа, остальные подключают код, позволяющий только продолжить действия в закрытой области ? если куки истекут, или он выйдет оттуда, придётся возвращаться на страницу для входа.




Содержание  Назад  Вперед