Коврик TrigGer'a - отличный способ узнать о web-дизайне все!!!
Желаешь превратить свои журналы в удобный справочник. Тогда это для тебя - программа FindJournals
Обратная связь
*** Журнал WEB Star #5 *** Programming
Оющая информация
Главная
Авторам
Сотрудничество
Ссылки
WEB design
Платный хостинг или в гостях у сказки
Халявы тут нет
Главное оружие сайта
Графика: сколько и зачем?
WEB фокусы
Дорвеи и поисковые системы
Примеры распространенных скриптов
Hostes.ru
Двенадцать принципов успеха в Интернете
Programming
Защита гостевой книги (perl)
Сессии и с чем их едят
Приемы безопасного программирования web приложений на PHP
Вступление в PHP и MySQL
ФотоSHOPия
Пасхальные яйца
Создаем решетку
Футуристический эффект
Текстовый эффект Speed
B O N U S
Полезные советы для WIN
Еще немного о w98
Как правильно ставить Windows
Проект Денвер
Юмор
Компьютерный вирус
Лесбийский чат на далеком американском сервере
Как завести дома программиста (полезное пособие)

Защита гостевой книги написанной на Perl

Автор: Danil
Источник:
http://www.danil.dp.ua/

Гостевая книга. Такая штука есть у очень многих на личных и не только пагах. Здесь я расскажу о защите этой самой гостевой книги. Допустим, кто-то очень обиделся на твое высказывание в его адрес (абсолютно справедливое) и попробовал подефейсить твою страницу. Если ему это удалось, то можешь дальше не читать. Рассмотрим такой случай: отсканировав и изучив все сервисы и скрипты, он пришел к выводу, что или ошибки этих сервисов еще не найдены, или необходимо платить деньги за эксплоит, или иметь шелл (аккаунт) на твоем серваке. Денег за эксплоит платить "не в масть" и к твоему серваку доступ получить тоже никак не получится. Тут он сразу пойдет смотреть, что у тебя за гостевая книга, форум, голосование - все что без премодерирования в on-line. Если уж не отдефейсить, то хоть испортить что-то попробует.

Рассмотрим принцип действия большинства гостевых книг, написанных на perl. Для добавлении записи есть поля для ввода имени, мыла и сообщения. На некоторых есть еще ввод адреса твоей страницы, города, страны и т.п. Все поля для ввода находятся внутри тегов <form></form>. При нажатии кнопки (submit), данные посылаются через url http://www.damain.com/guest.pl?name=$name&email=$email&hpu=$hpu&city=$city&comment=$comment. Это я к тому, что можно отсылать данные и не через форму, а на прямую. В скрипте они преобразуются и заносятся в базу. При выводе всех сообщений, скрипт получает значения из базы и выводит в хтмл. Некоторые недобросовестные писатели скриптов (это особенно касается бесплатных программ), оставляют для атакующего очень широкое поле деятельности. Рассмотрим несколько приемов:

1) АТАКА: в любое поле ввода внести очень большой кусок данных. Если проверка на длину не происходит, то 18 глав камасутры очень оживят любую гостевую книгу.
ЗАЩИТА: ограничение размера ВСЕХ введенных данных. Найди в скрипте место получения параметров и поставь сразу после него что-то типа:

# Проверка на размер комментариев
if (($FORM{comment} ne "") and (length($FORM{comment})<500)) {
$comment=$FORM{comment};
}
else {
exit 0 ;
return 1 ;
}
# Проверка на размер мыла
if (($FORM{email} ne "") and (length($FORM{email})<20)) {
$email=$FORM{email};
}
else {
$email="0";
}
# Проверка на размер дом. страницы
if (($FORM{hpu} ne "") and (length($FORM{hpu})<30)) {
$url=$FORM{hpu};
}
else {
$url = "0";
}
# Проверка на размер города
if (($FORM{city} ne "") and (length($FORM{city})<20)) {
$city = $FORM{city};
}
else {
$city = "0";
}
# Проверка на размер имени
if (($FORM{name} ne "") and (length($FORM{name})<20)) {
$name = $FORM{name};
}
else {
exit 0 ;
return 1 ;
}

Эта конструкция не даст ввести данные, больше заданного размера. Такой проверкой обладают почти все гостевые книги, но на всякий случай нужно проверить.

2) АТАКА: даже если есть ограничение на длину комментариев, то можно ввести очень длинное слово (например, из 500 букв Ш), которое разопрет твою гостевую книгу, как пузо после 6 бутылок 6-ой балтики.
ЗАЩИТА: ограничение размера слов. Сделать это можно примерно так:

# В переменной $comment - введенные комментарии
# Преобразуем строку в массив слов (@text1). Разделитель - пробел
@text1=split(/ /,$comment);
# Запускаем цикл перебора слов из массива
for ($i=0;$i<=scalar(@text1);$i++) {
# Если длина слова больше 35 - выход
if (length($text1[$i])>35) {
exit 0 ;
return 1 ;
}
}

3) АТАКА: распереть гостевую книгу можно и по вертикали (500 символов перевода каретки).
ЗАЩИТА: замена символа конца строки на пробел, а не на <br>. Чем больше изучаю perl - тем больше он мне нравится. С той позиции, что много встроенных удобных функций. Замена делается всего в одну строчку:

# В переменной $comment - введенные комментарии
$comment =~ s/\n/\ /g;

4) АТАКА: использовать теги для вывода текста очень большого размера или для завешивания броузера. В конечном итоге, все данные выводятся в HTML и это можно использовать. Например, поле комментариев можно написать так:

<font color=red style="font-size: 500 pt">шшшш шшшш [много "шшш"]

или так:

<script onLoad="Start();">
function Start() { timer1=setTimeout(IE_Down, 10); }
function IE_Down() { document.write("IE to DOWN"); }
</script>

Первое приведет к выводу слов размером 500 пунктов (гостевая станет похожа на транспарант в масштабе 1:1), второе к завешиванию IE.
ЗАЩИТА: самый простой способ - менять в тексте все "<", ">" на "[" и "]" или на "<[пробел] ", "[пробел]>" или на &lt; и &gt;. Делается это так:

# В переменной $comment - введенные комментарии
$comment =~ s/\</\[/g;
$comment =~ s/\>/\]/g;

4) АТАКА: в очень многих гостевых книгах есть подсветка мыла и паги. Работает это примерно так: если в тексте есть [ http://www.danil.dp.ua ], то это переделывается на [ <a href="http://www.danil.dp.ua">http://www.danil.dp.ua</a> ]. Теперь, если изменить свою пагу на [ http://www.danil.dp.ua"><font style="font-size: 500 pt">шшшшшшшш< ], в броузере это будет выведено как [ <a href="http://www.danil.dp.ua"><font style="font-size: 500 pt">шшшшшшшш<">http://www.danil.dp.ua"><font style="font-size: 500 pt">шшшшшшшш<</a> ]. Т.е. внутри строки мы зыкрываем тег ссылки и делаем тег немаленького текста. Тоже неплохо.
ЗАЩИТА: автоподсветку надо делать ПОСЛЕ проверки на теги (см. выше).

Выводы. Памятка атакующему - используй анонимный прокси. Памятка защищающемуся - определяй IP-адрес и заноси в базу. Это только несколько самых известных способов. Они применимы не только для гостевой книги.

P.S. Статья и программа предоставлена в целях обучения и вся ответственность за использование ложится на твои хилые плечи.

 
Вверх   
 -=: Тех. поддержка 
 Warning :=-
Notes
© Copyright Алекс aka TrigGer & x-graphic studio
© Все права защищены.
Перепечатка материалов разрешается, только после письменного разрешения автора (e-mail). При перепечатке любого материала с журнала видимая ссылка на источник www.kovrik.hut.ru и все имена, ссылки авторов обязательны. Для просмотра сайта рекомендуется:
Разрешение: 800*600
Браузер: Internet Explorer 5.5 или выше
Для более эффективного просмотра нажмите F11.