Возможно ли так взломат сайт?

12 3
S
На сайте с 21.10.2007
Offline
34
1894

Здравствуйте. Помогите решить проблемку. Сделал сайт с инклюдом, Само подключение происходит по такому коду.

<?

if(!empty($dr))include("$dr/$id");

else{

if ($id=="") {

include ("first.html");

}

else {

include ("$id");

}

}

?>

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

Кто в курсах помогите, люди добрые, Подскажите что нужно сделать и изменить тут, чтоб прекратить спам.

Жду с нетерпением ответов.

NM
На сайте с 10.04.2008
Offline
76
NFM
#1

include("$dr/$id"); через это и ломают.

можно просто задать scipt.php?dr=saitculhakera&dr=scriptuhacera.php и твои сайт взломан

DI
На сайте с 03.01.2007
Offline
123
#2
snug:
Подскажите что нужно сделать и изменить тут, чтоб прекратить спам.
Жду с нетерпением ответов.

Пока не расскажете, какую роль выполняет вышенаписанный кусок кода, никто не сможет предложить правильное решение.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
[Удален]
#3

ID и DR числовые или буквенные ?

Если и то и другое то:

<?
$id = $_GET['id'];
$dr = $_GET['dr'];

if (empty($id) || preg_match('#[^a-z0-9]#s', $id) || preg_match('#[^a-z0-9]#s', $dr)) {
include ("first.html");
} elseif(!empty($dr)) {
include("$dr/$id");
} else {
include ("$id");
}
?>

Ссылка по теме http://php.ru/forum/viewtopic.php?p=35#35

DenIT:
Пока не расскажете, какую роль выполняет вышенаписанный кусок кода, никто не сможет предложить правильное решение.

Я предложил :)

Зингельшухер добавил 30.05.2008 в 20:42

И главное (обращаюсь ко всем кто занимается написанием подобных "шедевров") перестаньте страдать фигнёй, подобный скрипт вам специалист за 5$ напишет, а если на форуме спросить (и спросить правильно) то и вовсе бесплатно...

DI
На сайте с 03.01.2007
Offline
123
#4
Зингельшухер:
Я предложил :)

Ну для "пинка в правильную сторону" - это, разумеется, подойдет:) Но ТС, судя по вопросу, интересует готовое решение, и можно ждать следующих вопросов:

1. Я указал папку "/statyi/novyie/vasya" (или вообще с другого сайта), но она не вывелась!

2. Почему-то не работает, если название файла начинается с заглавной буквы!

3. Данные вводятся через форму на главной странице, скрипт их не видит!

4. У меня файл называется "реферат.html" - так что, нельзя?

и т.п.

Поэтому просто гадать насчет условий не хочется, а

Зингельшухер:
если на форуме спросить (и спросить правильно) то и вовсе бесплатно

:)

S
На сайте с 21.10.2007
Offline
34
#5

DenIT вышенаписанный кусок кода подключает в index.php файл id через директорию dr

NFM врубинкокс "то есть понял :)", получаеться ты на своём сервере открываешь чужие файлы ,в которых и могут быть скрипты выполняющие спам. Так?

ЗингельшухерХороший ник, многозначительный))). id и dr на них у меня ограничений нет. Вот по вашему совету и применю наверное регулярочку чтоб только буквы были.

За 5 уе не интересно, самому интереснее, понять "вкурить" что к чему.

И ещё вопрос в догонку. Если у меня на сайте есть 3 формы. Данные из них тоже не никак не фильтруются, не обрабатываються, и на сайте не светяться, только сохраняються в файл .txt. Как злоумышленник может это использовать?

DI
На сайте с 03.01.2007
Offline
123
#6

snug, да, правильно поняли.

Вообще, надо привыкать приводить все используемые внешние переменные к нужному типу, чтоб впоследствии не болела голова. Т.е. если ждете число - делаете $id = (int)$_GET['id'], если данные приходят через POST-форму - то и забираете их из $_POST, проверив при этом $_SERVER[HTTP_REFERER].

В данном случае - да, проверяете регуляркой (учтя все варианты, в т.ч. слеши и т.п., если необходимо).

snug:
И ещё вопрос в догонку. Если у меня на сайте есть 3 формы. Данные из них тоже не никак не фильтруются, не обрабатываються, и на сайте не светяться, только сохраняються в файл .txt. Как злоумышленник может это использовать?

Зависит от того, как написан скрипт сохранения данных в файл.

[Удален]
#7
snug:
id и dr на них у меня ограничений нет.

В этом и проблема (так нельзя, ограничения нужны)

snug:
Хороший ник, многозначительный

Просто взят из анекдота

snug:
самому интереснее, понять "вкурить" что к чему.

Тогда кури мануал, там сказано что, почему, как, зачем и.т.д.

DenIT:
надо привыкать приводить все используемые внешние переменные к нужному типу

Заблуждение, (int) не может превышать 2млрд а так-же не может начинаться с нулей, это проблема и проблема важная. Опять-же строка "12рапг7124" будет равна "12" однако это не одно и тоже.

Данные надо проверять а не преобразовывать, а (когда уже их надо отправлять в базу/файловую систему/итд) преобразовывать их надо не в зависимости от того откуда пришли а от того куда пойдут.

Ссылка по теме http://dkflbk.nm.ru/php_basic_err_1.html

DI
На сайте с 03.01.2007
Offline
123
#8
Зингельшухер:
Данные надо проверять а не преобразовывать

Ну, зависит от задач. Если данные пользовательские - то да, ему нужно тыкать ошибки, пока не введет правильно. А если передается идентификатор объекта для последующего добавления в запрос, и его можно подменить через GET - то проще привести данные к int (в этом случае и нули в начале, и 2 млрд - неактуальны), и использовать их. А выводить взломщику сообщение "ваш xss содержит недопустимые символы" - лень:)

Зингельшухер:
преобразовывать их надо не в зависимости от того откуда пришли а от того куда пойдут.

Ну, внутренние переменные (определенные за 100 строк до передачи) я стараюсь изначально в правильном виде определять:)

PS: за ссылку спасибо 🍻

PPS: is_numeric ругается на пробел после числа, а это достаточно распространенная ошибка ввода в поле. Соответственно, нужно еще и trim использовать?

[Удален]
#9
DenIT:
А выводить взломщику сообщение "ваш xss содержит недопустимые символы" - лень

По этому можно тупо выводить 404 (если речь идёт о GET параметрах) ибо странички c адресом например /ru/forum/comment/3287792 не существует (а благодаря моему сообщению яндекс проиндексирует и будет думать что это реальная страничка) так что реальный XSS в действии

DenIT:
Ну, зависит от задач.

Само собой всё зависит от конкретных случаев, например если проверять число которое изначально не может иметь никаких значений кроме 1 и 2 то тут вообще всё просто, тупо можно case-ом обойтись, или вове if-ом

DI
На сайте с 03.01.2007
Offline
123
#10

тем не менее, ссылка кликабельна и ведет сюда же:)

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий