www.gcmsite.ru

Новости Программы PHP-скрипты Статьи Числа
Услуги Резюме Игры Автомобили Поиск

СИСТЕМНОЕ И ВЕБ-ПРОГРАММИРОВАНИЕ
компьютерная техника, игры

PHP: Защита чата от взлома

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

Парa слов о написании простого защищенного чата на php.

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

Имя, под которым посетители входят в чат должно состоять только из допустимых символов (например, разрешить только латинские симфолы, цифры и знак подчеркивания):

$name - имя
$name2 = ereg_replace("[^a-zA-Z0-9_]","",$name);
if ($name != $name2){exit;} - ошибочное имя
Если входное имя изменилось, после применения на него шаблона допустимых символов, то завершаем работу скрипта.

Цвет сообщения - самое правильное решение - создать массив цветов.
w_color = array("white", "red", "blue", "green") - количество цветов ограничивается лишь Вашей фантазией, но не переборщите. Проверка на взлом:

$color - цвет сообщения
if (!in_array($color,$w_color){exit;} - взлом не пройдет
Если встречаем цвет, которого нет в массиве допустимых цветов, то запрещаем дальнейшую обработку из скрипта.

Шрифт - аналогично цвету: w_font = array("Times", "Arial", "Courier", "Garamond");

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

$intonation  - интонация
$intonation2 = ereg_replace("[^a-zA-Zа-яА-Я ]","", $intonation);
if ($intonation  != $intonation2) {exit;}   - взлом

Строка ввода текста. Запрещаем ненужные символы, заменяем некоторые из них на код, но не выходим при найденных недочетах, а отображаем новую строку:

$mess =  str_replace("&#", "&#", $mess);
$trans = array( ">"=>"&gt; ", "<"=>"&lt; ", "\n"=>"", "\r"=>"",
                "\""=>"&quot;", "'"=>"&quot;");
$mess = strtr($mess, $trans);
В результате в переменной $mess будут безопасные для отображения символы.

Это не все методы защиты, но достаточные для того, чтобы чат не поплыл от различных скриптов и бегущих строк.

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

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

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

Чуть не забыл. Проверяйте входные строки на их длину. Например, интонации не должны превышать 50 символов:

    if (strlen($intonation)>50){exit;}
Строка сообщений не должна превышать 500 символов:
    if (strlen($mess)>500){exit;}
Имя посетителя не может быть длиннее 20 символов:
    if (strlen($name)>20){exit;}

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

deny from all

Думаю, для защиты чата этого достаточно. Гарантированно, что 50 из 51 взломщика пойдут искать другой чат для развлечений. Оставшийся взломщик будет думать дальше, атакуя уже не сам чат, а сервер, на котором этот чат расположен. Но это уже другая история...

Парa слов о написании простого чата на php. Этот простой чат представлен с исходниками. Качайте, разбирайтесь, спрашивайте.


PHP — это язык программирования, основанный на использовании скриптов. Данный язык широко применяется для создания различных front-end и back-end веб-приложений. Поддерживается по-умолчанию большинством хостеров, являясь одним из лидеров среди языков программирования, предназначенных для создания динамических интерактивных сайтов.

Интересные материалы на сайте:

Автор, разработчик: Шаров Евгений   (gcmsite@yandex.ru)
(c) 2000-2020 GCM-Site - системное и веб-программирование
Цитирование материалов сайта возможно только при наличии гиперссылки