Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Общие сведения о работе с файлами

ЛАБОРАТОРНАЯ РАБОТА

Тема: "Простая система парольной защиты страниц"

Цель работы: Освоить использование библиотек РНР для работы с файлами и создания простой системы защиты страниц от несанкционированного доступа.

Перед тем, как приступить к выполнению задания, необходимо ознакомиться с методами работами с файлами, используемыми в РНР. Необходимые сведения приведены в разделе "Справочная информация" в конце файла.

Вычисление хеш-кода строки по алгоритму md5

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

Алгоритмы MD2–MD5 были разработаны в 90‑е годы для хеширования цифровых подписей, которые перед превращением в индивидуальный ключ сжимаются в зашифрованную последовательность (дешифровка не предусматривается). Алгоритмы применимы к текстам произвольной длины и выдают хеш-значение в виде 128-битного значения.

В РНР для получения md5-кода применяется функция

string md5 (string str)

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

Замечание

Функция int strcmp (string str1,string str2) проводит сравнение строк с учетом регистра букв и возвращает нуль, если строки совпадают, и не нуль, если они разные.

ЗАДАНИЕ (Создание простой системы парольной защиты)

Информация о зарегистрированных пользователях хранится на сервере в текстовом файле psw.txt построчно в формате

< имя_пользователя > < хеш-код пароля >

1. Разработать административную утилиту, которая позволяет добавлять пользователей в файл паролей.

Интерфейс утилиты — веб-страница admin.htm, содержащая форму с тремя полями ("Имя", "Пароль", "Повторить пароль") и кнопкой "Добавить пользователя". Перед отсылкой формы проверяется совпадение копий пароля (обработчик onsubmit).

Скрипт (файл add.php), обрабатывающий форму, преобразует пароль в хеш-значение и сохраняет имя пользователя и хеш-значение в файле паролей psw.txt (каждая запись заносится в отдельную строку, а между именем пользователя и хеш-значением вставляется один пробел).

Если информация о пользователе успешно занесена в файл, то на страницу, выполняющую обработку, выдается сообщение "Пользователь <имя> добавлен в файл!", иначе выводится текст "Ошибка при добавлении!".

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

Замечание.

Считать пока, что совпадений имени нового пользователя с именем уже зарегистрированного пользователя не будет. Проверка на такое совпадение будет предметом другой лабораторной работы.

2. Подготовить страницу регистрации пользователя (файл registr.htm), где имеется форма с полями "Имя", "Пароль" и кнопка "Зарегистрировать".

3. Подготовить скрипт, для обработки введенной регистрационной информации (файл verify.php). Присланный пароль преобразуется в хеш-код, формируется строка по аналогии с административной утилитой (между именем пользователя и хеш-значением вставляется один пробел) и отыскивается совпадение с этой строкой в файле паролей.

В случае правильного сочетания "имя-пароль" пользователю пересылается страница с приветствием "Добро пожаловать". В случае ошибки страница содержит текст "Неправильное имя или пароль" и ссылку "Назад", возвращающую пользователя на страницу регистрации.

4. Создать страницу protected.php с текстом "Защищенная страница", а на страницу с приветствием добавить ссылку на protected.php.

Защищенную страницу должны просматривать только пользователи, прошедшие проверку. Чтобы исключить в дальнейшем возможность просмотра protected.php без регистрации (например, по закладке в Избранном) необходимо при загрузке этой страницы каждый раз проверять, прошел ли пользователь процедуру регистрации. Для этого в успешную часть скрипта, проверяющего пароли, необходимо добавить функцию устанавливающую куки. В простейшем случае для создания сеансового куки достаточно задать два аргумента, например,

setCookie("user","good");

После этого на каждой защищенной странице (в данном задании такая одна — protected.php) нужно предусмотреть проверку, установлено ли это значение куки. Для этого достаточно проанализировать значение элемента массива $_COOKIE["user"]. Если значение не установлено, то должна (без предупреждений) происходить переадресация на регистрационную страницу.

Замечание.

Перезагрузку страницы в РНР-скрипте можно предусмотреть, если отослать из него http-заголовок

header("Location: registr.htm");

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

Справочная информация

Тип resource

Среди типов данных, определенных в РНР, есть специальный тип resource, который используется для обозначения данных типа "ссылка на внешний ресурс" (файл, база данных и т.п.).

Данные этого типа возвращаются некоторыми библиотечными функциями, например, при открытии файла или установления соединения с базой данных.

Программист не может создавать объекты этого типа. Например, нельзя преобразовывать к типу resource значения других типов.

Поэтому в полном смысле слова resource типом данных не является. Это искусственная конструкция, которая была введена в РНР, чтобы подчеркнуть ссылочный характер данных и скрыть реальный тип значения (оно может быть, например, целым числом или даже объектом).

Общие сведения о работе с файлами

В РНР принципы работы с файлами и библиотеки функций похожи на используемые в Си. При открытии файла возвращается ссылка на открытый поток, которая далее используется для работы с этим файлом.

1. Открытие и закрытие файлов.

Для открытия файла используется функция fopen

resource fopen (string file, string mode)

Файла может быть задан с помощью URL (поддерживаются разные протоколы: http://, ftp://, file:// и другие) или обычным образом (т.е. задается локальный файл).

Режимы определяются строковыми значениями (совпадают по смыслу с используемыми в языке Си):

r — только для чтения,

r+ — для чтения и записи (в начало файла),

w — только для записи (если файла нет, то создается, с начала файла),

w+ — для чтения и записи (если файла нет, то создается),

a — открыть файл для дополнения (в конец файла),

а+ — открыть файл для дополнения и чтения (если файла нет, то он создается).

При успешном завершении функция возвращается ссылка на файл, а при неудаче — false.

Пример использования:

if(!$file=fopen("text.txt","r")

echo("Ошибка открытия файла");

else{…}

Для закрытия файла используется функция

bool fclose (int fp).

Аргумент функции — ссылка на ранее открытый файл. В зависимости от успешности операции, функция возвращает true или false.

 

Замечание

В современных версиях РНР функция fopen имеет два дополнительных необязательных аргумента, а также новые режимы открытия x, x+, c, c+.

Чтение из файлов

В РНР имеется набор функций, позволяющих выполнять операцию чтения информации из файла разными способами. Ниже приводятся некоторые из них.

А) Чтение строк.

Чтобы прочесть строку из файла, используется функция fread:

string fread (resource fp, int length)

Функция читает из файла строку, длиной не более length.

if(!$file=fopen("text.txt","r"))

echo("Невозможно прочесть");

else{

$text=fread($file,10);

fclose($file);

}

Б) Чтение одного символа.

Для чтения одного символа используется

string fgetc (resource fp);

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...