Вопрос № 32855: Спасибо за ответы по гостевой книге. Я тут нашел самый простой скрипт. Подправил его немного, установил на сайте. Теперь я хочу узнать, реально ли его поиметь. И прошу вас, если кому не лень, протестировать его на дыры и всякие там уязвимости. Мне ин...
Вопрос № 32.855
Спасибо за ответы по гостевой книге. Я тут нашел самый простой скрипт. Подправил его немного, установил на сайте. Теперь я хочу узнать, реально ли его поиметь. И прошу вас, если кому не лень, протестировать его на дыры и всякие там уязвимости. Мне интересно
, сможет кто-нибудь узнать пароль или похозяйничать в моей гостевухе. Вроде не должен. Но вдруг?
Адрес гостевухи http://romodos.pp.ru/gb/
Приложение:
Отправлен: 08.01.2006, 10:00
Вопрос задал: romodos (статус: Практикант)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 18)
Отвечает: Ерёмин Андрей
Здравствуйте, Romodos!
Оставил сообщение. Всё нормально работает. По поводу безопасности - не думаю, что кто-то станет взламывать гостевуху и подбирать пароль. В ней нет никакой особо ценной информации. Просто пароль лучше ставить не тот, что используется для доступа к сайту или к почтовому ящику, а другой. Удачи!
--------- Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 08.01.2006, 10:38 Оценка за ответ: 5 Комментарий оценки: Спасибо за внимание
Отвечает: Zysoftik
Здравствуйте, Romodos!
Потестировал немного. Вот что я пронаблюдал:
Положительные моменты:
- вырезаются теги, что препятствует вызову JavaScript
- скрипт работает без сбоев (с недочетами, но без сбоев)
- имеется оперативная модерация
Недочеты:
- повторная отправка сообщения при обновлении страницы
- постоянно приходится вводить свое имя (как минимум)
- вся передача данных идет через адресную строку
- при вводе слишком длинного слова все раздвигается
Теперь что я могу посоветовать как исправить:
1. Повторная отправка сообщений
Здесь нужно каждый раз перед добавлением проверять по базе ник и текст сообщения. Т.е. для MySQL выполнить что-то типа
$sql="select * from yourtable where nick='".$nick."' and STRCMP(message,'".$message.'")=0";
$res=mysql_query($sql);
if (@mysql_num_rows($res)>0) {
//Уже есть такое сообщение
}
else {
//Добавляем
}
2. Постоянно приходится вводить данные в форму
Здесь нужно при выводе формы прописать полям значение.
Т.е. написать так:
а, после всех проверок в функции обработки добавляемого сообщения, если сообщение добавлено и ошибок не возникло - обнулить переменную с текстом сообщения.
При этом, вывод формы должен стоять после обработки данных.
Тогда получится так - при ошибке сохраняется вся форма, а в случае успешного добавления - все, кроме текста сообщения.
3. Вся передача идет через адресную строку
Не очень красиво. Лучше сделать все в тени. Для этого надо в форме явно указать метод передачи данных:
<form method=post action=''>
А в скрипте, вместо $_GET использовать $_POST.
4. Слишком длинное слово раздвигает таблицу
Тут, в общем, ничего не поделаешь :(
Можно вывернуться так:
- используем $words=explode(" ",$message);
- получаем список слов из текста, разбитого по пробелам (первый параметр)
- выводим каждое слово, проверяя его длину:
for ($i=0;$i<count($words);$i++)
{
if (strlen($words[$i])>MAXLEN) echo substr($words[i],0,MAXLEN)."...";
else echo $words[$i];
echo " ";//Пробел, т.к. они были "съедены" при разбивке
}
Получится так, что слова, длина которых превышает MAXLEN будут урезаны до этой длины и к ним будет добавлено троеточие.
Не очень гуманный метод, но при разумных параметрах может спасти и дизайн и не нервировать пользователей.
И еще совет - если нет желания превратить свою гостевуху в свалку чужих ссылок, не приносящих тебе ничего - не делай непосредственные ссылки на ресурсы. Пиши их просто текстом. Тогда и интереса автоматам не будет, и хлама будет меньше.
По поводу "похозяйничать" - я лично не хакер. На ламерские методы скрипт реагирует, вроде, адекватно.
Ответ отправил: Zysoftik (статус: 1-ый класс)
Отправлен: 08.01.2006, 11:06 Оценка за ответ: 5 Комментарий оценки: Очень-очень подробный ответ. Спасибо за помощь. Сейчас же начну все исправлять
Отвечает: Lancelot
Здравствуйте, Romodos!
Это я так матернулся((((( Вообщем, антимат напиши, или сдери его откуда нибудь: www.manlix.ru Отличная гостевуха, я оттуда много положительных моментов брал! Ещё: сделай куки, а то имя вводить нудно постоянно. Идёт добавление одинаковых сообщений. Если хочешь чтобы не флудили, то исправь чтобы этот юзер ( сэтими куками или айпишником) мог добавлять только через 3-5 минут. А то зафлудят тебя! А так: теги не пропускает (это отлично!)! Если что-то незнаешь, напиши мне, или спроси на РусФаке, будем думать вместе.
Если что-то срочно надо, то стучись в асю. Я оперативно помогу.
--------- Дуракам везёт? Не такие уж они и дураки. (Хенрик Ягодзинский)
Ответ отправил: Lancelot (статус: Студент)
Отправлен: 08.01.2006, 13:27 Оценка за ответ: 5 Комментарий оценки: Спасибо за тестирование. Я уже вроде что-то исправил. Еще буду работать. Вы мне очень помогли
Отвечает: Дмитрий Иванов
Здравствуйте, Romodos!
По крайней мере сразу 2 проблеммы на быстрый поверхностный осмотр:
1. не проверяется от куда делается новая запись, что выразится в возможности неограниченного спама у тебя в гостевухе. Я сохранив страницу у себя на локалке смог ввести новую запись
2. мыльные адресса записаны открытым текстом с HTML.
--------- ставя оценку - подумай, может ты не все описал.
Ответ отправил: Дмитрий Иванов (статус: Студент)
Отправлен: 08.01.2006, 16:02 Оценка за ответ: 5 Комментарий оценки: Спасибо за внимание Вроде там везде теги фильруются.