[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Взлом сайта
Sonax
Вообщем написал я тут мини cms свою, она по адресу http://realty66.org.ru/ (Прошу модеров не счесть за рекламу эту ссылку, без неё тема эта уже смысла не имеет). Написал и оставил в интернете. И как то прихожу, смотрю сайт взломали и написали всякие гадости=) Дети, ейбогу. Смысл в чём. В том, что пароль от сайта был и есть 123(http://realty66.org.ru/admin.php). Вопрос в том, что догадались ли взломщики о пароле или в скрипте действительно дыра. Так же хулиганы полазили в настройках и это больше всего пугает, так как после них остались следующие данные:
  • Ширина загружаемой фотографии: Пусто
  • Ширина превью фотографии: Пусто
  • Папка под фотографии: ../../../../etc/
  • Количество записей, выводимых в таблице на одну страницу: Пусто

авторизация выглядит следующим образом.

//Авторизация
if (isset($_POST['password']))
{
$sql=mysql_query("SELECT * FROM `other` WHERE `id`='admin_password'"); while ($req = mysql_fetch_assoc($sql)){$md5_pass=$req['key'];}
if(md5($_POST['password']) != $md5_pass) $error_authorization="Не верный пароль!<br>"; else {$_SESSION['login']='Администратор'; $md5_pass='';}
}

if(empty($_SESSION['login']))
{
echo "<form method='post'>
$error_authorization
Пароль<br>
<input type='password' name='password'><br>
<input type='submit' value='Войти' name='rederect_submit'>"
;
}
else
{
//админка
}




Спустя 9 минут, 1 секунда (18.11.2010 - 00:37) inpost написал(а):
Sonax
И то и другое. В пост запросе можно передать любой скрипт, у тебя не стоит защита вообще никакая. Надо обрезать вредоносный код. И это не дети, вполне разумные действия.
Теперь написали письмо владельцу с таким содержанием: "тра-ля-ля, ваш сайт дырявый, поломали мы, поломали другие, и будут каждый день и каждую ночь ломать. НО! Вы можете обратиться в наше агенство и мы исправим все недочёты. Наша компания всего за 10-20$ сделает ваш бизнес безопасным!".
Минус репутация тебе, плюс репутация им.

Спустя 2 часа, 4 минуты, 24 секунды (18.11.2010 - 02:42) ABC написал(а):
Такого быть не должно, помимо авторизации вообще ни одной проверки нет что ли?

user posted image

Спустя 3 часа, 15 минут, 29 секунд (18.11.2010 - 05:57) Guest написал(а):
Дети не дети, а урок тебе преподали )

Спустя 13 часов, 48 минут, 20 секунд (18.11.2010 - 19:45) Sonax написал(а):
foreach($_GET as $k=>$v)$_GET[$k]=mysql_real_escape_string($v);
foreach($_POST as $k=>$v)$_POST[$k]=mysql_real_escape_string($v);

У меня в connect.php инклуженом на всех страницах стоит этот код, так что за безопастность в этом случае я не парюсь.
A.B.C. Это print_r($_POST); Использую во время разработки.

Спустя 6 часов, 11 минут, 36 секунд (19.11.2010 - 01:57) ABC написал(а):
Sonax

Да собственно, mysql_real_escape_string - используется исключительно для безопасного занесения данных в БД и желательно делать это в момент занесения:

"...WHERE name='". mysql_real_escape_string($name)."'"

Цитата
foreach($_GET as $k=>$v)$_GET[$k]=mysql_real_escape_string($v);
foreach($_POST as $k=>$v)$_POST[$k]=mysql_real_escape_string($v);


этими строчками ты только загружаешь и тормозишь скрипт, как мне кажется.

Лучше перед каждым выводом инфы на экран обработай ее htmlspecialchars, а чтоб не вводили то что не нужно и меньше тормозило обрежь вводную инфу какой-нибудь регуляркой.

И не забудь про проверку и перевод в int() для id в строке где выбираешь поля, которые лучше было бы конкретно указать, а не писать *.

Пусть меня поправят если что-то не так.

Спустя 6 часов, 59 минут, 55 секунд (19.11.2010 - 08:57) Basili4 написал(а):
Sonax
а нах.

вот это нужно
Цитата (Sonax @ 18.11.2010 - 20:45)
foreach($_GET as $k=>$v)$_GET[$k]=mysql_real_escape_string($v);
foreach($_POST as $k=>$v)$_POST[$k]=mysql_real_escape_string($v);



это как воду в ступе толочь на всякий случай.

Спустя 4 дня, 9 часов, 23 минуты, 51 секунда (23.11.2010 - 18:21) maximka787 написал(а):
Какая-то новая прям система авторизации) необычная.
Ты можешь просто
1. проверить на POST
2. проверить длину переменных ограничив до 10 например
3. урезать принудительно (для спокойного сна)
4. Фильтр на теги
5. + mysql_real_escape_string(); (в базу)

и на всех условиях exit(); при невыполнении.

И дальше живи не думая о проблемах)

Спустя 1 день, 1 час, 30 минут, 23 секунды (24.11.2010 - 19:51) Sonax написал(а):
A.B.C., скрипт работает оптимально быстро, генерация меньше сотой секунды на всех страницах. Basili4, Пусть будет.
maximka787, писал сам, как придумал. Это всё стоит.



Вопрос в том, есть ли дыры на сайте или нет, если есть какие.



Спустя 1 день, 5 часов, 1 минута, 33 секунды (26.11.2010 - 00:53) bebeka написал(а):
Я может быть ошибаюсь, но это вообще нормально такое писать ?

А не будет проще сделать вот так:

if (mysql_num_rows("SELECT * FROM `other` WHERE `id`='admin_password' AND `key` = '".mysql_real_escape_string($_POST['password'])."'") == 0) {
// Ошибка, не найден наш клиент...
} else {
// Админка
}


И еще, вот, написано:

if(empty($_SESSION['login']))


То есть, если переменная $_SESSION['login'], пустая, то выводим форму ??
Так нельзя, надо постоянно проверять на совпадения. И хранить не логин в сессиях, а допустим session_id()...Не знаю...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.