Дипломная (вкр): Создание динамического Web-сайта с использованием языка программирования PHP

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Телефон:<br> <input type=text name=tel><br>

<input type=submit value='Зарегистрироваться'>

</form>

";"";

}

?>

В файле config.php содержится следующая информация:

<?php

$HOST = "localhost"; // имя сервера

$USER = "root"; // пользователь базы данных MySQL

$PASS = ""; // пароль для доступа к серверу MySQL

$DB = "KingAuto"; // название создаваемой базы данных

?>

Результат запроса приведен на рисунках 3.1. и 3.2.


Рис. 3.1 Регистрация пользователя

Рис. 3.2 Регистрация пользователя

3.3    Авторизация пользователя


Для реализации авторизации пользователя создадим файл index.php со следующим кодом:

<?php

if($_GET['ex']==1) // функция для закрытия сессии

{($_SESSION["name"]);($_SESSION["sname"]);_destroy();

}"config.php";

$auth=false; //Изначально при открытии страницы сайта, пользователь

не авторизирован

if ((isset($_POST['name']) and isset($_POST['sname'])) or

(isset($_SESSION['name']) and isset($_SESSION['sname']))) // проверяем

заполнены ли поля авторизации

{

$dcnx=mysql_connect("$HOST", "$USER", "$PASS"); // подключаемся к

базе данных(!$dcnx) exit(mysql_error());(!mysql_select_db($DB,$dcnx)) exit(mysql_error());

$query = mysql_query("SELECT * FROM Zakazchiki;"); // пишем запрос

о том, что бы выбрать пользователя из таблицы БД Zakazchiki

{

echo "<p>Ошибка в запросе</p>";

exit();

}

{($row=mysql_fetch_array($query))

{(($row['name']==$_POST['name'] and

$row['secondname']==$_POST['sname']) or

($row['name']==$_SESSION['name'] and

$row['secondname']==$_SESSION['sname']))

$auth=true; // Если введенные данные совпадают с данными из базы

данных, авторизация проходит успешно.

}

}($auth)

{_start(); // Открывает сессию

$_SESSION['name'] = $_POST['name'];

$_SESSION['sname'] = $_POST['sname'];

"Поздровляю ".$_POST['name'].", вы успешно

авторизированы<br><a href=index.php?ex=1>выход</a>";

}

}

{"

//Оформляем поля ввода

<div>

<form method=post action=read.php>

<input type=submit value='Управление пользователями'>

</form>

<form method=post action=write.php>

<input type=submit value='Регистрация'>

</form>

</div>

<div>

<form method=post action=index.php>

Имя: <input type=text name=name><br>

Фамилия: <input type=text name=sname><br>

<input type=submit value='вход'>

</form>

</div>";

}

?>

Рис. 3.3 Авторизация пользователя

Рис. 3.4 Авторизация пользователя

сайт база данный пользователь

Рис. 3.5 Выход пользователя из системы

3.4    Управление пользователями


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

<?php

include 'config.php';

$dcnx=mysql_connect("$HOST", "$USER", "$PASS"); //подключение к

БД(!$dcnx) exit(mysql_error());(!mysql_select_db($DB,$dcnx)) exit(mysql_error());

$query = mysql_query("SELECT DISTINCT z.familia, z.name_zak, z.city,

z.tel Zakazchiki z;"); // запрос о выводе всей информации о

пользователе

if(!$query)

{"<p>Ошибка в запросе</p>";

exit();

}

else

{

$number = mysql_num_rows($query);//считаем количество учетных

записей($number == 0)

{"Учетных записей не существует";

}

else

{//создаем таблицу пользователей

echo "<table width=600 align=center>";

echo "<tr>";"<th collspan=5>";

echo "Количество учетных записей: $number";

echo "</th>";"</tr>";"<tr>";"<th>";"Фамилия";"</th>";"<th>";"Имя";"</th>";"<th>";"Город";"</th>";"<th>";"Телефон";"</th>";"</tr>";"<tr>";($row=mysql_fetch_array($query))

width=20 height=20></a>";// картинка является ссылкой на файл

delete.php в который методом get передается имя пользователя

echo "</td>";"</tr>";

}"</table>";

}

}

?>

Рис. 3.6 Управление пользователями

Рис. 3.7 Удаление пользователя из базы данных

3.5    Гостевая книга


Создание гостевой книги не многим отличается от коментирования материалов сайта. Гостевая книга проще в связи с однозначностью базы данных (она ведь не делиться на отдельные темы), о количестве записей в ней не требуется куда-либо сообщать. Но отображать их лучше в обратном порядке. То есть, если коментарии логично отображать последовательно, один за другим, то в гостевой книге, скорее, приемлем обратный порядок: новые записи впереди, а старые в конце. Это будет правильным, поскольку для всех важнее новое сообщение в гостевой книге, а старые, возможно, утратили свое значение, поскольку ситуация с момента их записи могла в корне изменится. Таким образом, получается, что основная концепция гостевой книги такова:

1. Вся гостевая книга должна храниться в одном файле.

2.      Она должна открываться по щелчку на ссылке.

.        Поскольку большое количество сообщений в гостевой книге приведет к громоздкости страницы, требуется ограничить допустимую длину сообщения и количество сообщений на 1 странице (последнее правило определяет постраничный вывод записей некоторыми порциями).

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

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

Таким образом, создаем ссылку на файл index1.php, который в свою очередь имеет следующий код:

<? //Создаем Скрипт, который записывает данные формы и

переадресовывает запрос

function check($str){

$str=ereg_Replace("(<([^>])*>|>|<)","",$str); //Вытащить текст из тегов

$str=str_replace("|",'&#124;',$str); //Заменить вертикальную черту

(символ 124) кодом, черта будет использоваться как разделитель полей

$str=str_replace("`",'&#096;',$str); //Заменить оператор выполнения

(символ 96) кодом

$str=str_replace("'",'&#039;',$str); //Заменить одинарные кавычки их

кодами

$str=str_replace('"','&quot;',$str); //Заменить двойные кавычки их кодами

(теперь никакие кавычки не попадут в страницу)

$str=str_replace("\r",'',$str); //Удаляем перевод каретки (иначе нарушится

структура базы данных)

$str=str_replace("\n",'<br>',$str); //Заменить начало строки HTML-кодом

(иначе нарушится структура базы данных)

return ($str);

}(@$warn) {unset($warn);}

$maxlines=10; // сообщений на странице

$maxlen=35; // длина полей

$maxlenMes=1000;// длина сообщения

$filename = "guest.csv"; // Занесем имя файла в переменную(@$_POST['add']) {(empty($_POST['name']) or empty($_POST['mess'])) {// проверка

наличия обязательных полей (именно в методе ПОСТ)

$warn="Не заполнены обязательные поля!";

}else{

$warn="";(strlen($_POST['name']) > $maxlen)

{

$name=substr(check($_POST['name']),0,$maxlen);

$warn="Слишком длинное имя. Сократите до $maxlen символов! ";

}else{

$name=check($_POST['name']);

}(strlen($_POST['mail']) > $maxlen)

{

$mail=substr(check($_POST['mail']),0,$maxlen);

$warn="Слишком длинное имя. Сократите до $maxlen символов! ";

}elseif($_POST['mail'] and ! eregi("([0-9a-z\.-_]+)@([0-9a-z\.-_]+)\.([a-

z]{2,}) *$",$_POST['mail'])){

$warn.="Таких электронных адресов не бывает! ";

}else{

$mail=check($_POST['mail']);

}

(strlen($_POST['url']) > $maxlen)

{

$url=substr(check($_POST['url']),0,$maxlen);

$warn.="Слишком длинный адрес. Сократите до $maxlen символов!";

}else{

$url=check($_POST['url']);

}(strlen($_POST['city']) > $maxlen)

{

$city=substr(check($_POST['city']),0,$maxlen);

$warn.="Слишком длинное название города. Сократите до $maxlen

символов!";

$city='';

}(strlen($_POST['mess']) > $maxlenMes)

{

$mess=substr(check($_POST['mess']),0,$maxlenMes);

$warn.="Слишком длинное сообщение. Сократите до $maxlenMes

символов!";

}else{

$mess=check($_POST['mess']);

}

}(empty($warn)) {

$f=fopen($filename,"a") or die("Не могу открыть файл на запись!");

flock($f,LOCK_EX); // ждем, пока не станем единственными и

блокируем($f, "$name|$mail|$url|$city|".time()."|$mess\r\n"); // записываем

данные в файл($f); // записываем все изменения на диск($f,LOCK_UN); // говорим что, больше не будем работать с

файлом и разблокируем

fclose($f); // Закрываем файл("Location: #"871096.files/image013.jpg">

Рис. 3.8 Форма гостевой книги

Рис. 3.9 Запись в гостевой книге

4. Технология AJAX


Впервые термин AJAX был публично использован 18 февраля 2005 года в статье Джесси Джеймса Гарретта (Jesse James Garrett) «Новый подход к веб-приложениям». Гарретт придумал термин, когда ему пришлось как-то назвать новый набор технологий, предлагаемый им клиенту.

Однако в той или иной форме многие технологии были доступны и использовались гораздо раньше, например, в подходе «Remote Scripting», предложенном компанией Microsoft в 1998 году, или с использованием HTML элемента IFRAME, появившегося в Internet Explorer 3 в 1996 году.стал особенно популярен после использования его компанией Google в сервисах Gmail, Google Maps и Google Suggest.- не самостоятельная технология, а концепция использования нескольких смежных технологий. AJAX базируется на двух основных принципах:

·  использование технологии динамического обращения к серверу «на лету», без перезагрузки всей страницы полностью, например:

·        с использованием XMLHttpRequest (основной объект);

·        через динамическое создание дочерних фреймов;

·        через динамическое создание тега <script>.

·        через динамическое создание тега <img>, как это реализовано в google analytics.

·        использование DHTML для динамического изменения содержания страницы;

В качестве формата передачи данных могут использоваться фрагменты простого текста, HTML-кода, JSON или XML.

Очень часто перед вебмастером стоит задача дать посетителю сайта возможность выбора, так, чтобы второй вариант выбора динамически подставлялся в зависимости от первого. Допустим, наша база данных автомобилей насчитывает более 300 марок автомобилей и более 3000 моделей, конечно список из 3000 пунктов довольно неудобен. Эту проблему можно легко решить с помощью технологии AJAX. Для этого необходимо создать функцию, которая непосредственно осуществляла бы AJAX запрос, а так же новый файл ajax.php, где мы и напишем запрос к нашей базе данных. Таким образом, получаем следующий результат:

Рис. 4.1 Применение технологии AJAX

5. Способы защиты от SQL-инъекций


Внедрение SQL-кода (англ. SQL injection) - один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.

Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

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

Для защиты от SQL-инъекций сайта фирмы «King Auto» я применяла один из самых простых способов: необходимо «обрамлять» параметры SQL-запроса одиночными кавычками ('), поскольку, через GET- и POST-запрос невозможно передать символ одиночной кавычки (он будет автоматически заменен сочетанием символов - \' - т.е. экранироваться).

А также воспользовалась стандартными PHP функциями mysql_real_escape_string() и sprintf().

Функция mysql_real_escape_string() экранирует специальные символы строки, таким образом, изменяя синтаксис параметров SQL запроса и приводя его в негодность.

Функция sprintf() возвращает отформатированную строку. Нам пригодятся директивы вида %s - строка, и % d - целое число.

Способов защиты от SQL инъекции много, но не один из них не дает 100% гарантии защищенности. Ведь на каждое действие есть противодействие, и особенно заинтересованный опытный хакер наверняка найдет способ, как получить доступ к базе данных.

ВЫВОДЫ


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

Ознакомилась с видами SQL инъекций и способами защиты базы данных от попыток взлома.

Список использованной литературы


1. Кузнецов Максим, Симдянов Игорь. PHP . Практика создания Web-сайтов. - 2-е изд. перераб. и доп. - Спб.: «БХВ-Петербург», 2011. - С. 1264.

2.      Кузнецов Максим, Симдянов Игорь. PHP на примерах. - 2-е изд. перераб. и доп. - Спб.: «БХВ-Петербург», 2011. - С. 400.

.        Кузнецов Максим, Симдянов Игорь. Объектно-ориентированное программирование на PHP. - Спб.: «БХВ-Петербург», 2009. - С. 608.

Источник: https://www.bibliofond.ru/detail.aspx?id=871096