Ваш первый Сайт С использованием РНР-скриптов

ОСНОВЫ БЕЗОПАСНОСТИ ДЛЯ САЙТА

В этой главе мы разработаем с вами еще одну страницу для сайта, на ко­торую вы попадете, нажав на главной странице index.php надпись «Статьи». Создайте в рабочей папке htdocs подпапку statji. В эгу подпапку вы будете загружать любые статьи. В браузер будут выводиться название статьи, автор статьи. Дополнительно мы создадим книгу отзывов посетителей и создадим возможность посетителям оценивать страницу по пятибалльной шкале. Про­граммы для книги отзывов и оценки страницы создадим универсальные, т. е. их можно будет использовать на любых страницах вашего сайта.

Теоретические знания, которые нам понадобятся в этой главе, у вас уже должны быть, если вы разобрались с предыдущими главами. Однако кое-что нам нужно еще усвоить.

В книге отзывов каждый желающий может оставить на странице свое со­общение, которое будет потом отображаться в браузере. Он указывает свои данные (имя, электронный адрес) и записывает свое сообщение в текстовую область формы. Затем эти данные будут обрабатываться, и если текстовая область не была пустой, сообщение с указанными данными посетителя, будет выведено в окно браузера. Создание книги отзывов не вызовет у вас затруд­нений, но есть некоторые нюансы. Какой-нибудь недоброжелатель, вместо своего имени, адреса или сообщения может отослать вредоносный код, напи­санный на языке php, perl, и т. п. Поэтому данные, введенные пользователем, мы должны обработать, а именно, теги, которые посетитель может ввести, должны быть удалены. При помощи тегов злоумышленник может ввести в текстовые поля код на php, html, JavaScript, VBScript, который может на­нести вред вашей странице или даже всему вашему сайту. Напишем, к при­меру, небольшой код. Создадим форму с простым текстовым полем и кноп­кой «добавить». После отправки данных из формы на эту же страницу со­держимое текстового поля отобразится в браузере. В общем-то, безобидный на первый взгляд код листинга 6.1.

Листинг 6.1 <?Php

$filen="test. txt";

If(!file_exists($filen))

{

$open=fopen($filen, "w");

Йжоттм

Fclose($open); }

If(isset($_POST['imja']))

{

$imja=$_POST[4mja'l; $open=fopen($filen, "a+");

$rec=fwrite($open, "Здравствуй: ".$imja."<br>"); fclose(Sopen);

}

$open=fopen($filen, "a+"); $read=fread($open, 1000); fclose(Sopen); echo Sread;

Echo "<form action=obychenie2.php method=POST>"; echo "Ваше Имя: "."<input type=text name=imja><br>"; echo "<input type=SUBMIT Уа1Ие=Добавить>";

Echo "</form>";

?>

Я лишь вкратце разъясню этот код. Он должен быть вам понятен. Снача - ло проверим, существует ли файл test.txt (можете назвать его, как хотите). Если нет, а при самом первом запуске программы это действительно так, то создаем его. Далее проверяется, отправлены ли данные из формы, т. е. бы­ла ли нажата кнопка «добавить». Если это так, то в текстовый файл test.txt за­писывается содержимое текстового поля, которое было введено в форме. Да­лее открываем этот файл, считываем и выводим в браузер это содержимое. Кстати, содержимое текстового файла будет после выводиться в браузер и до ввода данных в форму, поскольку даже если условие if(isset($_POST['imja'])) Ложно (мы только запустили эту программу, но не ввели еще данные в фор­му), код после последней закрывающейся скобки будет выполняться.

Сохраните в рабочей папке htdocs и запустите эту программу. В тексто­вое поле введите любое имя, например «Иван». Нажмите на кнопку «доба­вить». Веденное имя отбразится в браузере, как показано на рис. 6.2. Кстати, если вы используете сейчас компьютер, не подключенный к Интернету, то после нажатия кнопки в форме может появиться предупреждение, подоб­ное на рис. 6.1.

Это может появиться при использовании метода отправки в теге формы Method=POST. Если нажмете кнопку «Повтор», то данные будут отправлены повторно, в результате чего в текстовый файл эти данные будут записаны дважды, а в браузер выведется 2 раза имя «Иван». Лучше жмите «Отмена» Для возврата к странице, чтобы данные из формы не отправлялись повторно.

Microsoft Internet Explorer

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

|Повтор ] [ Отмена j

Рис. 6.1

Итак, после возврата к данной странице, вы увидите примерно так, как на рис. 6.2.

W Svoi. NET : РНР Edit [C:Home_serverApache2htdocsMyBookobychenie2.

РР Файл Редактор Вид Пуск Подсветка Закладки Вставка Помощь S Язык

BadJtV* » 4ii: а ^ rs1 у-■ s Л и - а.

(Щ Address: ^h«p://localhost/MyBook/obychenie2.php. v|

Здравствуй: Иван

Рис. 6.2

Теперь представьте, что некий Пупкин введет в текстовое поле следующее: <body bgcolor=black text=red>TIynKUH</body>.

Нажмите на кнопку «Добавить». Вся ваша страница станет черной, цвет текста красным. Перезапустите программу. Увы, дизайн так и остался изме­ненным, поскольку введенный HTML-код, который устанавливает цвет фона и шрифта, будет теперь выполняться при каждой загрузке этой страницы, и дизайн может быть испорчен. И это еще меньшее из зол, что может сделать злоумышленник.

Избежать подобных действий со стороны «товарища Пупкина» поможет функция htmlspecialchars(). Эта функция заменяет все теги и обратные слеши на безопасные буквенно-символьные выражения (обратные слеши использу­ются для программирования на Perl). Измените переменную $гес в листинге 6.1 следующим образом:

$rec=fwrite($open, "Здравствуй: ".htmlspecialchars($imja)."<br> ");

Снова запустите программу и опять введите в текстовое поле: <body bgcolor=black text=red>NymuH</body>.

В результате выполнения программы в окно браузера будет выведена приведенная выше строка. Теги выведутся тоже, но исполняться не будут! Если вы хотите, чтобы текст выводился определенного шрифта и цвета, ставьте нужные вам теги перед и после функции htmlspecialchars(). Например: $rec =fwrite($open, "Здравствуй: ". "<В style='color: #000066; font-family: Arial'> ".htmlspecialchars($imja). "</B><br> ");

Перед функцией htmlspecialchars($imja) при помощи соединительного оператора конкатенации (точки), в кавычках вставлен тег <В>, который под­разумевает жирный текст. Кроме того, в этом теге определен стиль текста (вид шрифта Arial темно-синего цвета). После функции обязательно нужно поставить закрывающий тег </В>.

Снова запустите данную программу, напишите любое имя в текстовое поле формы и опять нажмите кнопку «Добавить». Имя будет выведено шрифтом Arial, темно-синего цвета.

Функцию htmlspecialcharsQ мы будем использовать и в дальнейшем, что­бы обеспечивать безопасность сайта от вводимых гользователями данных. Есть еще другая функция stripJags(), которая, в отличие от предыдущей функции, не заменяет, а удаляет все теги. Мы ее тоже будем применять на практике.

Ваш первый Сайт С использованием РНР-скриптов

Создание сайта

Итак, при помощи данной книги вы создали сайт. Конечно, сайт в таком виде не очень привлекателен, так как он создавался исключительно для при­мера. Но используя полученные знания в этой книге, …

ИСПОЛЬЗОВАНИЕ СЕРВИСА ROBOXCHANGE ДЛЯ ОПЛАТЫ

Если у вас нет никакой возможности получить персональный аттестат, или просто лень это делать, то для оплаты товаров со своего сайта вы можете воспользоваться сервисом Roboxchange. Этот сервис дает возможность …

ИСПОЛЬЗОВАНИЕ СЕРВИСА WEB MERCHANT INTERFACE ДЛЯ ОПЛАТЫ

Сервис Web Merchant Interface позволяет получать денежные средства на свои электронные кошельки от клиентов при оплате ими электронных товаров на вашем сайте. Электронные кошельки WebMoney и Yandex мы с вами …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.