компания ВеРаД
новости портфолио услуги статьи ЧаВо о нас разное

  Поиск






<< к оглавлению

Немного о безопасности или детские ошибки

Автор: Сергей Пуриков

Какие первые ассоциации приходят в голову, когда читаешь строки "талантливый московский хакер Василий П. взломал систему защиты интернет-магазина "Товары для кошек" и в течении двух недель мог безнаказанно получать доступ ко всем внутренним разделам…"? Бегущие серии нулей и единичек; мощный подключенный к компьютеру пробкотрон, неустанно перебирающий комбинации букв и цифр; специально написанный червь, запущенный в сеть компании…
Возможно, бывает и так (ага, конечно). Но в жизни все гораздо скучнее и прозаичней. Админу было лень. Программист совершил примитивные ляпы и так их и не исправил. Заказ на разработку сайта выполняла "студия", отношение которой к клиенту базировалось на принципе "деньги - вперед".
Просто поразительно, с какой периодичностью люди умудряются наступать на одни и те же грабли. И все бы ничего, но с недавних пор в сети появились руководства, эти ошибки прославляющие и рекомендующие к использованию… В качестве контрмеры предлагаю это руководство, созданное на основе собственного опыта и опыта посетителей http://phpclub.net

Глупые пароли и их отсутствие

"Пароль, пароль, пароль…" - лихорадочно соображает админ, - "О! Компания называется "Katze", значит паролем будет - "katze". И заказчику легко запомнить…"
Понять этого админа несложно - зачем излишне перенапрягать свои мозги, да и кому придет в голову ломать сайт компании с таким названием? Многие следуя этой логике не указывают пароль вообще (правда, ну зачем он нужен, лишняя головная боль), а некоторые (видимо те, кто вообще не умеет создавать пароли, другого объяснения я не вижу) изменяют название каталога на "adm, admin1 или katzeadmin" - чтобы никто не догадался. Особенно забавно оказывается, когда его находит Яndex...

Неинициализированные переменные

Вглядитесь в эту программу:

if(checkUser($login, $password)){
$logged = true;
}
....
if($logged){
//уронить сайт (Y/N)
}

…и представьте, что будет, ежели глупый пользователь при вызове этой страницы случайно допишет параметр logged=true?

Передача имени страницы

Часто употребляемый случай и, пожалуй, самый интересный для любопытного посетителя.

news.php?page=news01.html

news.php

include ($page);

Ну а дальше все просто. Заходит, подцепляем любую страницу, которую хотим, и смотрим, смотрим, смотрим…

Передача SQL-запроса

Доктор сказал - в морг, значит в морг. Эту ошибку, несмотря на всю ее бредовость, тоже умудрялись совершать. А далее… Далее странице подсовывается глобальный DROP и… кто виноват? Конечно, хакеры!

Внимание, ошибка!

"Уважаемый пользователь! Сообщаем Вам, что навернулся модуль db.inc, находящийся по адресу … . В нем Вы можете узнать самую последнюю информацию о паролях для доступа к нашей базе и вообще много интересного" - именно так зачастую выглядит для умного пользователя не скрытое по причине кривых рук сообщение об ошибке в оном db.inc. Аналогично ни в коем случае пользователь не должен получать текст несработавших запросов, ошибки о подцеплении заголовков и подвалов страниц - словом, максимум что он должен получить, это сообщение "что-то плохо, обратитесь в администрацию".

Сладкая халява

Хороший программист не запятнает свои руки работой. Он наберет в поисковике "готовые программы на php" или "форум на php", за пять минут прикрутит его, рапортует высокому начальству и побежит в ближайший ларек за пивом. А когда форум упадет, во все будет виноват юзер, зашедший на страничку и сказавший "гы, тут тот же форум, что и у … , интересно, а роняется он точно также? У… Круто…."…
В общем, если уж не верите в свои силы, скачайте, разберитесь и напишите такой же.

Hidden - значит спрятан

<form action="downloadmoney.php">
<input type="hidden" name="isbigboss" value="1">

Дальше продолжать? Или и так уже все ясно?

Javascript для проверки пароля

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

Заключение

Это самые примитивные, но и, как ни странно, самые распространенные ошибки, совершаемые разработчиками. Продолжать повествование можно достаточно долго - можно напомнить о прозрачности Интернета и предложить шифровать пароли, можно сказать, что все что проходит пользователя хоть POST-ом, хоть GET-ом может быть им выловлено, можно отослать скачивать последние заплатки на PHP…
Но гораздо важнее посоветовать получше относиться к себе и к заказчику, побороть природную лень, и заделывать даже те дыры, которые никто никогда не найдет…



По теме:

 

Copyright "Верад", 2002

главная | новости | портфолио | услуги | статьи | вопросы и ответы | о нас | разное

Hosted by uCoz