
- •«Разработка системы управления содержанием Internet-ресурса»
- •1. Создание бд.
- •2. Создание файла с параметрами соединения с бд.
- •3. Создание приложения для доступа к бд
- •4. Создание контроллера
- •5. Использование аутентификации.
- •6. Создание учетной записи пользователя.
- •7. Организация взаимодействия в рамках сессии
6. Создание учетной записи пользователя.
В командной строке MySQL введите USE client и создайте таблицу MySQL, введя следующий код
CREATE TABLE users(user_id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(100) character set cp1251,
last_name VARCHAR(100) character set cp1251,
username VARCHAR(45),
password CHAR(32),
PRIMARY KEY(user_id));
Добавьте в таблицу запись о пользователе с зашифрованным паролем, например
INSERT INTO users(first_name, last_name, username, password)
VALUES(‘Михаил’, ‘Калашников’, ‘mikalash’, MD5(‘mysecretword’));
Убедитесь в создании записи с помощью запроса (рис. 8).
Рис. 8
Функция MD5() преобразует пароль в число по определенному алгоритму. Злоумышленник может в БД узнать только значение, возвращаемое хеш-функцией от строки пароля. При доступе к БД введенный пароль преобразуется в хеш-значение. Это значение сравнивается с числом, сохраненным в БД для данного пользователя.
7. Организация взаимодействия в рамках сессии
Простейшим механизмом, позволяющим специфицировать обмен между клиентом и сервером, являются так называемые cookie. Технология cookie позволяет сохранять сведения о пользователе в текстовых файлах, помещаемых на стороне клиента. Файлы cookies отправляются серверу с каждым новым запросом в составе HTTP-заголовка. Для установки cookie в PHP используется функция setcookie(). Аргументы функции в порядке их указания: имя для программного доступа, сохраняемое значение, временная отметка действия cookie в секундах, URL доступности сайта, домен доступности cookie для определенного поддомена сайта, режим безопасности (1 – режим безопасности включен – cookies будут передаваться только через безопасное соединение по протоколу HTTPS, 0 – режим безопасности выключен). Проверить успешность установки cookie можно при истинности значения, возвращаемого инструкцией isset($_COOKIE["xxxx"]), где xxxx – первый аргумент функции setcookie(). При этом, для наблюдения результата установки cookie необходимо дополнительно обновить web-страницу. Имя пользователя может быть получено из переменных $_COOKIE["username"] или $_SERVER[HTTP_COOKIE]. Уничтожить cookie можно путем указания истекшего срока его хранения, например setcookie("username", "", time()-10). Альтернативным способом уничтожения cookie является его переустановка с указанием только его имени.
Альтернативные возможности по организации индивидуального взаимодействия между приложением клиента и сервером предоставляет механизм сеансов. С началом сеанса определяется ряд переменных. Новому сеансу сервер назначает уникальный идентификатор, который хранится в обозревателе и передается на сервер каждый раз при запрашивании пользователем очередной страницы. Информация о сеансах хранится на стороне сервера в сериализованном (последовательном) виде. При сериализации переменной в файл записывается имя переменной, ее тип и значение в виде последовательной строки. Запись о сеансе создается только при наличии у переменной определенного значения. Использование идентификатора при необходимости проверки подлинности избавляет от необходимости вводить имя и пароль каждый раз при просмотре новой страницы.
Идентификатор сеанса может передаваться через cookie или в строке URL при запрете в настройках обозревателя использования cookie.
Для начала сеанса необходимо добавить в начало сценария вызов функции session_start(). Завершается сеанс с помощью вызова функции session_destroy() или при закрытии обозревателя. При закрытии сеанса его данные удаляются из файлов на стороне сервера. Закрытие сеанса, однако, не удаляет переменные сеанса, такие как $_SESSION["username"], $_SESSION["password"]. Ответственность за удаление переменных сеанса ложится на разработчика серверного сценария. Переменная сеанса уничтожается принудительно функцией unset(). Проверить недоступность переменной можно с помощью функции is_null().
Необходимо обеспечить в приложении помимо аутентификации проверку, установлен ли идентификатор сессии, повторное отображение окна для ввода логина и пароля в случае использования некорректной комбинации «логин-пароль» и инициализацию переменных сессии из регистрационных данных пользователя.
Измените файл Authent.php следующим образом
session_start();
require_once('db_login.php');
if(empty($_SESSION['user_id'])){
if(!isset($_SERVER['PHP_AUTH_USER'])||!isset($_SERVER['PHP_AUTH_PW']))
{
header('WWW-Authenticate: Basic realm="Member Area"');
header("HTTP/1.0 401 Unauthorized");
echo "Введите имя пользователя и пароль!";
exit;
}
else echo "Вы зарегистрировались как: ".$_SERVER['PHP_AUTH_USER']." с паролем ".$_SERVER['PHP_AUTH_PW']."<br />";
$db_select=mysql_select_db($db_database,$connection);
if(!db_select) {
die("Невозможно выбрать БД: ".mysql_error());
}
$username=mysql_real_escape_string($_SERVER['PHP_AUTH_USER']);
$password=mysql_real_escape_string($_SERVER['PHP_AUTH_PW']);
$query="select user_id, username from users where username='".$username."' and password=MD5('".$password."') limit 1";
$result=mysql_query($query);
if(!$row=mysql_fetch_array($result, MYSQL_BOTH)){
header('WWW-Authenticate: Basic realm="Member Area"');
header("HTTP/1.0 401 Unauthorized");
echo "Вашей комбинации логина и пароля не существует";
exit;
}
$_SESSION['user_id']=$row['user_id'];
$_SESSION['username']=$row['username'];
}
echo "Вы работаете в рамках сессии под логином ".$_SESSION['username'];
Функция empty() проверяет, установлена ли переменная. Функция mysql_real_escape_string() экранирует специальные символы строки-аргумента с учетом кодировки соединения, что позволяет безопасно использовать возвращаемый ею результат в SQL-запросе функции mysql_query(). Без применения средств экранирования специальных символов возможно внедрение потенциально опасного для информации в БД кода SQL. К такому коду можно отнести, например, команду DROP TABLE users, удаляющую таблицу БД. Экранирование специального символа, такого, например, как кавычки, переведет правильно построенный SQL-запрос в вид, непригодный для исполнения системой управления БД.
Часть запроса «limit 1» гарантирует выборку только одной записи по запросу.
Заключение
При разработке приложения текущего задания основные функции программы по взаимодействию с БД были сосредоточены в файле Model.php. Отображение актуального состояния БД и ряд элементов управления для перехода ко вводу и редактированию также выполнялась средствами файла Model.php. Предоставление форм для ввода и редактирования данных возложены на код файла View.php. Подключение файлов в определенной последовательности производится с помощью соответствующих инструкций ресурса Controller.php.
В отчете схематично отобразите взаимосвязь между воздействием на элементы управления форм, инициированный при этом поток передачи данных от файла к файлу, от файла к БД и обратно.