Hi-Tech  ->  Интернет  | Автор: | Добавлено: 2015-05-28

Приемы безопасного программирования web-приложений PHP на примере гостевой книги сайта Литературно-краеведческого музея города Ш

С развитием новых информационных и коммуникационных технологий для большинства организаций, государственных учреждений, магазинов, школ и просто физических лиц создание web-сайта и размещение информации в Интернете стало насущной необходимостью.

Изначально web-сайты представляли собой совокупности статических документов. В настоящее время большинству из них свойственна динамичность и интерактивность. Для таких случаев специалисты используют термин web-приложение – готовый программный комплекс для решения задач web-сайта.

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

В данной работе описываются основные приемы правильной защиты web-приложений PHP на примере гостевой книги сайта Литературно-краеведческого музея городского округа Шуя Ивановской области.

Структура сайта Литературно-краеведческого музея г. о. Шуя Ивановской области

Язык html не является языком программирования, а служит для разметки текстовых документов, поэтому с помощью него размечаются текст, таблицы, картинки и т. д. на страницах. То, как будут выглядеть картинки, текст и другие элементы на странице, и как они будут располагаться относительно друг друга, определяют метки (tags или тэги).

Сайт Литературно-краеведческого музея состоит из следующих основных разделов:

1. Главная

2. Галерея

3. Выставки

4. Художественные промыслы России

5. Карта сайта

6. Написать

7. Контакты

8. Экскурсии

Вся графика сделана в Adobe Photoshop CS3. Навигационное меню реализовано в PS CS3. При наведении мыши на картинку меню происходит смена изображения - это сделано с помощью css, используя *. gif изображения.

Чтобы сделать красивую и в то же время функциональную галерею, был применен javascript и подключена библиотека jquery для визуального оформления.

Фотогалерея разделена на два раздела:

1) “Старая Шуя” – фотографии города Шуя в 19 веке;

2) ”Фотографии музея” – фотографии экспонатов музея.

В сайте реализованы следующие web-приложения:

– подписка на RSS ленту новостей, где будут отображаться все новости о новых выставках, экспозициях, и других изменениях. Все новости можно будет получать прямо у себя в браузере, не заходя на сайт;

– для связи с администратором сайта сделана система обратной связи прямо с сайта, она написана на php;

– гостевая книга написана на php. В качестве базы данных использован текстовый файл. Здесь продумана административная часть, в которой администратор может ответить на письмо, отредактировать сообщение, удалить его.

Все данные для связи с музеем, телефоны, предлагаемые экскурсии, прейскурант цен можно посмотреть в меню “Контакты”.

Сайт полностью проверен под самые распространенные разрешения экранов, протестирован в браузерах:

– Internet explorer 6-8;

– Opera 9-10;

– Firefox 3;

– Safari;

– Google Chrome.

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

Приемы безопасного программирования web-приложений PHP на примере гостевой книги сайта

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

Вариантов атак на web-ресурс, как и последствий этих атак, великое множество. Вот примеры наиболее распространенных атак на web-сайты:

– подмена главной страницы сайта — на месте привычного содержимого на обложке сайта будет красоваться все что угодно — от имени хакера до банальных оскорблений;

– удаление файловой системы — вся информация попросту пропадает;

– подмена информации — злоумышленники могут подменить данные организации. В этом случае ваши пользователи автоматически становятся пользователями злоумышленников;

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

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

– создание высокой нагрузки — отправление в адрес web-сервера заведомо некорректных запросов или иные действия извне, результатом которых будет затруднение доступа к сайту или падение операционной системы сервера. Такой вид атаки очень широко распространен в интернете.

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

Существует универсальный способ раскрытия важных данных через web-приложения. Наиболее вероятными мишенями могут стать форумы, CMS, гостевые книги и другие приложения.

Необходимо знать несколько простых приемов безопасного программирования web-приложений. Рассмотрим их на примере гостевой книги сайта Литературно-краеведческого музея г. о. Шуя Ивановской области.

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

Пусть в гостевой книге существует 3 формы ввода: имя пользователя, его e-mail и тело сообщения.

Ограничение количества данных, передаваемых из форм ввода пользователем, например, от случайного ввода имени длиннее 20-ти символов осуществляется так:

Злоумышленник может скачать документ с формами ввода и подправить параметр maxlength. Для защиты от этого способа взлома можно установить в самом начале скрипта, обрабатывающего данные, проверку переменной окружения web-сервера HTTP-REFERER:

$referer=getenv("HTTP_REFERER"); if (!ereg("^http://www. myserver. com")) { echo "hacker? he-he. \n"; exit;

?> После этих изменений, если данные переданы не из форм документа, находящегося на сервере www. myserver. com, хакеру будет выдано деморализующее сообщение.

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

$username=substr($username,0,20);

Необходимо поставить запрет для пользователей на использование пустого поля имени, для того чтобы отсутствовали анонимные сообщения: if (empty($username)) { echo "invalid username"; exit;

Должен существовать запрет пользователю использовать в своем имени любые символы, кроме букв русского и латинского алфавита, знака "_" (подчеркивания), пробела и цифр: if (preg_match("/[^(\w)(\x7F-\xFF)(\s)]/",$username)) { echo "invalid username"; exit;

Должен существовать такой же запрет на используемые символы и для поля ввода адреса e-mail, поэтому нужно из уже известного списка разрешенных символов убрать русские буквы и пробел, а добавить знаки "@" и ". ", для корректного ввода адреса пользователем: if (preg_match("/[^(\w)(\@)(\. )]/",$usermail)) { echo "invalid mail"; exit;

Еще одним способом защиты данных является авторизация пользователя.

Можно провести авторизацию средствами HTTP через код 401. При виде такого кода возврата, любой браузер высветит окошко авторизации и попросит ввести логин и пароль. Далее браузер при получении кода 401 будет предлагать web-серверу текущие логин и пароль для данного realm'а, и только в случае неудачи потребует повторной авторизации. Пример: if (!isset($PHP_AUTH_USER)) {

Header("WWW-Authenticate: Basic realm=\"My Realm\"");

Header("HTTP/1. 0 401 Unauthorized"); exit;

Нужно разместить этот код в начале скрипта admin1. php. После его выполнения, будут определены две переменные $PHP_AUTH_USER и PHP_AUTH_PW, в которых соответственно хранятся имя и пароль, введенные пользователем. Их можно, проверить по SQL-базе: if (mysql_numrows($result) != 1) {

Header("HTTP/1. 0 401 Auth Required");

Header("WWW-authenticate: basic realm=\"My Realm\""); exit;

Затем осуществляется проверка пользователя по IP адресу. В этом случае, после прохождения авторизации, в локальной базе данных (sql, dbm, txt- файле) сохраняется текущий IP пользователя, а все скрипты защищенной части обращаются в переменную REMOTE_ADDR и проверяют, есть ли такой адрес в базе. Если есть - значит, авторизация была:

Например: include"config. php";

$ip=$REMOTE_ADDR;

$data=file("ban/ban. txt"); for ($i=0; $i

$info=explode("",$data[$i]);

$date=$info[2];

$time=$info[3];

$ipd=$info[0];

$why=$info[1]; if($ip==$ipd) { print"

При ведении лог-файлов лучше всего, если они будут расположены за пределами дерева каталогов, доступного через WWW. Если нет такой возможности нужно создать отдельный каталог для лог-файлов и закрыть туда доступ при помощи. htaccess (Deny from all).

Целей взлома web-сайтов как всегда только две — слава от показа собственных возможностей и выгода, проявляющаяся в виде материальной наживы.

Результатом взлома web-ресурсов могут быть, например, такие убытки: распространение конфиденциальной информации, порча содержимого сайта, перечисление денег с чужого счёта на свой собственный.

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

Обеспечение безопасности сайта — это комплексная мера. Безопасность сайта должна быть одной из первостепенных задач при его разработке, особенно в столь быстро развивающемся пространстве сети Интернет.

Комментарии


Войти или Зарегистрироваться (чтобы оставлять отзывы)