Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Хранение паролей






Для хранения паролей существует много более подходящих, нежели код сценария,

мест. Внутри сценария очень трудно изменять данные. Можно написать сценарий, ко-

торый будет изменять себя, но это плохая идея. Это будет означать существование вы-

полняющегося на сервере сценария, доступного для записи и изменений со стороны

других пользователей. Хранение паролей в отдельном файле на сервере позволит без

труда написать программу для добавления и удаления пользователей, а также для из-

менения паролей.

Внутри сценария или другого файла данных существует ограничение на количество

пользователей, которых можно обслуживать, серьезно не навредив общей производи-

тельности сценария. Если планируется сохранять большое количество элементов в файле

или производить поиск в рамках большого числа элементов, то, как обсуждалось ра-

нее, следует рассмотреть возможность использования базы данных вместо двумерно-

го файла. Практический метод выбора между файлом и базой данных гласит: если вы

собираетесь хранить и производить поиск в более чем 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';

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.