Защита сайта от взломаСтатья, прежде всего, предназначена для веб-программистов, занимающихся разработкой своих проектов (начиная от модуля до движка сайта). Хочу сказать, что большая часть веб-программистов в наше время занимается разработкой сайтов, используя уже готовые компоненты, фреймворки и т. п. С одной стороны, это экономит время разработки проекта, но с другой стороны появляется риск взлома сайта. Почему? Объясняю.

К примеру, возьмем популярный движок: joomja. Есть заказ, есть задание с использованием этого движка. Верстальщик сверстал дизайн, программист применил верстку к шаблону сайта, и вот, начиная с этого этапа, нужно быть крайне осторожным, так как этими действиями все не закончится. Заказчику обязательно понадобится какая-нибудь дополнительная возможность, которой нет в текущем шаблоне, и программисту, исходя из этого, потребуется написать свой модуль. Впрочем, можно и не писать, а найти уже готовый и попытаться прикрутить его к сайту.

Как правило все бесплатные и широко распространенные модули либо с уязвимостью либо не полностью включают в себя необходимый функционал. В первом варианте после установки модуля вам тщательно придётся проверить работоспособность модуля при любых возможных условиях, не исключен и тот вариант, что в сети вы найдете массу статей по взлому сайта, используя данный модуль. После этого можно закрыть дыру. Почему же так происходит? Неужели программисты не могут писать нормальные не дырявые компоненты?

Практические советыНа самом деле, вариантов может быть два.

Первый: программист просто не учел всех условий работы модуля.

Второй: у программиста изначально стояла цель создать уязвимость. Как правило ко второму варианту относится большинство широко распространенных бесплатных модулей. Выходов из этой ситуации может быть два. Первый: покупать платные модули. Второй: писать модуль самостоятельно.

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

 

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

Защита сайта от взлома - ошибки

 

Ну с модулями разобрались. Все должно быть предельно понятно. Далее я опишу основные приемы, которые можно и нужно применять в своем коде, не зависимо от того, будет этот код только компонентом или набором файлов движка.

При написании скрипта необходимо учитывать любые условия. На каждом этапе обновления нужно проверять ваш скрипт на уязвимость. Особенно нужно обратить внимание на скрипты которые обрабатывают внешние данные, как правило это данные, посланные методом POST или GET. Помните, что в переменных могут содержаться любые данные! К примеру, у вас есть страничка, которая обрабатывает данные GET и обращается к базе данных.

Если в переменную вписать символ ' , то произойдет ошибка, так как этот символ разграничивает переменные в запросе SQL. В результате в браузере появится сообщение об ошибке, номер строки и имя файла, где произошла ошибка. Далее злоумышленник будет пытаться составить запрос, в результате которого сможет вывести нужную информацию. Что сделать, чтобы избавиться от такой уязвимости? Самым простым вариантом будет включение функции «magic quotes» на сервере. Или, если это не возможно — использовать функцию
mysql_real_escape_string перед обработкой данных запроса.

Защита сайта от взлома

Следующая – самая частая ошибка, которую допускают программисты — недостаточное количество проверок условий. К примеру, возьмем такой код:

Есть страничка регистрации пользователей. После ввода данных принимаются и обрабатываются все значения и записываются в базу данных такой строчкой:

Замечу, что в этой табличке обычно хранятся все пользователи сайта. Отличаются они по типу. Если обычный пользователь будет с типом 8, то администратор, к примеру, будет 1. Следовательно, если при регистрации мы изменим в выборе типа учетной записи, то сможем зарегистрироваться как администратор, поэтому правильнее нужно было сделать такой запрос:

Помните, что если в коде страничке вы присвоите значение <input type="submit" disabled="disabled">, то это не означает, что никто не нажмет на кнопку. Даже опытные пользователи смогут вызвать в своем браузере файербаг и установить свое значение. То же самое касается и GET запросов. Если на сайте не видна ссылка ololo.ком/admin/?login=success это не означает, что пользователь не сможет по ней перейти.

Для хранения паролей лучше использовать не просто MD5($password), а MD5(MD5($password)). Не делайте бесконечных сессий, ставьте ограничение по времени жизни сессий. Путь к админке выбирайте на свое усмотрение, не оставляйте его стандартным типа /admin или /administrator. Рано или поздно человек, знающий путь админки и хэш пароля, сможет открыть себе доступ. Не лишним будет написание функции проверки на дос-атаки.

Достаточно просто сравнивать IP клиента на частоту обращений и проверку пути запроса. Полезной будет функция привязки IP администратора, однако она же может стать и неудобством. Если у вас на сайте присутствуют страницы, позволяющие пользователям загружать изображения на сервер — обязательно проверяйте содержимое файлов. Желательно давать загруженным изображениям другие имена, а также проверять их на размер, тип, и содержимое.

Вот это, в принципе, и есть основные правила безопасности. Следуйте им и старайтесь почаще просматривать логи сервера.

Чаще просматривайте логи сервера

 

 

 

Комментарии

Комментарии