Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Хранение паролей
Для хранения паролей существует много более подходящих, нежели код сценария, мест. Внутри сценария очень трудно изменять данные. Можно написать сценарий, ко- торый будет изменять себя, но это плохая идея. Это будет означать существование вы- полняющегося на сервере сценария, доступного для записи и изменений со стороны других пользователей. Хранение паролей в отдельном файле на сервере позволит без труда написать программу для добавления и удаления пользователей, а также для из- менения паролей. Внутри сценария или другого файла данных существует ограничение на количество пользователей, которых можно обслуживать, серьезно не навредив общей производи- тельности сценария. Если планируется сохранять большое количество элементов в файле или производить поиск в рамках большого числа элементов, то, как обсуждалось ра- нее, следует рассмотреть возможность использования базы данных вместо двумерно- го файла. Практический метод выбора между файлом и базой данных гласит: если вы собираетесь хранить и производить поиск в более чем 100 элементах, следует отдать предпочтение базе данных. Использование базы данных для хранения имен и паролей посетителей не сильно усложнит сценарий, но позволит быстро проводить аутентификацию множества пользователей. Это также упростит создание сценария для добавления и удаления пользователей, а также даст возможность пользователям изменять свои пароли. Сценарий для аутентификации посетителей страницы с использованием базы данных приведен в листинге 2.1.
Листинг 2.1. secretdb.php — используется MySQL для улучшения нашего простого механизма аутентификации: <? if (" isset ($name) S& 'isset ($password)) { // Посетитель должен ввести имя и пароль ? > < hl> Please Log In< /hl> This page is secret. < form method = post action = " secretdb.php" > < table border = 1> < tr> < th> Username < /th> < td> < input type = text name = name> < /td> < /tr> < tr> < th> Password < /th> < td> < input type = password name = password> < /td> < /tr> < tr> < td colspan =2 align = center> < input type = submit value = " Log In" > < /td> < /tr> < /table> < /form> else { // Подключиться к MySQL $mysql = mysql_connect ('localhost', 'webauth', 'webauth') if (! $mysql) { echo 'Cannot connect to database. '; exit; } // Выбрать соответствующую базу данных $mysql = mysql_select_db (' auth '); if (! $mysql) ( echo 'Cannot select database.'; exit; } // Запрос к базе данных, чтобы проверить, // существует ли соответствующая запись $query = " select count (*) from auth where name = ' $name ' and pass = ' $password' "; $result = mysql_query ($query); if (! $result) { echo 'Cannot run query.'; exit; } $count = mysql_result ($result, 0, 0); if ($count > 0) { // Комбинация имени и пароля посетителя правильная echo " < hl> Here it is! < /hl> "; echo " I bet you are glad you can see this secret page."; } else { // Комбинация имени и пароля посетителя не правильная echo " < hl> Go Away! < /hl> "; echo " You are not authorized to view this resource."; Используемую в примере базу данных можно создать, подключившись к MySQL как пользователь root и запустив показанный в листинге 2.2 сценарий.
Листинг 2.2. createauthdb.php — эти запросы создают базу данных auth, таблицу auth и двоих пользователей. create database auth; use auth; create table auth ( name varchar(lO) not null, pass varchar(30) not null, primary key (name) ); insert into auth values ('user', 'pass'); insert into auth values ('testuser', password('test! 23')); grant select, insert, update, delete on auth.* to webauthglocalhost identified by 'webauth';
|