Безопасность
Автор: | Артемьев Сергей Игоревич |
ICQ: | 438856621 |
email: | _spin_@bk.ru |
Безопасность - один из ключевых моментов, на которые должен в первую очередь обращать внимание любой разработчик. Взлом сайтов - это абсолютно незаконное, но иногда очень прибыльное занятие, а лёгкие деньги привлекают как начинающих, так и опытных "специалистов".
Защиту сайта необходимо вести в двух направлениях: защита кода и защита данных.
Защита кода
Существует множество вариантов атак на сайты, но львиная доля взломов происходит из-за халатности администраторов и программистов. В образовательных целях рекомендую сходить на популярный сайт "Хакер.ру" и посмотреть несколько видеороликов о взломе.
Все наиболее популярные атаки можно разделить на три группы: атаки на сервер, атаки на интерпретатор и атаки на скрипт.
При атаках на сервер злоумышленники используют уязвимости в серверных программах (например, уязвимости веб-сервера или почтовых служб). Единственное средство защиты от таких атак - качественная работа администраторв сервера, отслеживание ими новостей о новых уязвимостях и своевременное обновление программного обеспечения. Разработчик сайта своими силами защититься от таких атак не может, т.к. не имеет достаточных прав.
Второй тип - атаки на интерпретатор, а в нашем случае - на интерпретатор PHP. Не некрет, что в любой программе есть "дырки", которыми может поспользоваться злоумышленник. Смысл атаки в том, чтобы подать на вход интерпретатору такую последовательность команд, исполнив которую он ошибочно предоставит злоумышленнику доступ к каким-либо ресурсам сервера. Такая ситауция называется "повышение привилегий". Защита от таких атак - своевременное обновление администраторами версии PHP и установка пакетов исправлений. Со своей стороны разработчик должен отслеживать появляющиеся уязвимости в функциях и соответствующим образом изменять скрипты.
Защита от третьего вида атак полностью лежит на плечах программиста. Как уже говорилось, большая часть взломов происходит из-за ошибок или недоработок в коде. Чтобы избежать основных ошибок, следуйте следующим простым правилам:
1. Никогда не доверяйте чужим данным, даже если они получены из надёжного, но всё-таки стороннего источника (например, с сайта партнёра или от зарегистрированного пользователя). Все данные должны быть в обязательном порядке перед использованием проверены на корректность.
2. Пользуйтесь готовыми библиотеками доступа к базам данных. Такие библиотеки обычно хорошо проверены на безопасность и постоянно совершенствуются хорошими специалистами. Вам достаточно лишь следить за обновлениями и поддерживать свои версии библиотек в актуальном состоянии.
3. Не доверяйте пользователям даже в мелочах. Исходите из постулата, что если есть возможность навредить, то найдётся человек, который навредит.
4. Старайтесь самостоятельно обрабатывать ошибки и никогда не показывайте подробности ошибок пользователям. Знание путей к файлам, имён библиотек, названий баз данных и таблиц сильно упростит задачу хакера.
5. Всегда старайтесь очищать используемые переменные. Одна не очищенная вовремя переменная может перечеркнуть все ваши усилия по защите. Это относится и к переменным классов. Если переменная используется только в одной функции - не надо делать её глобальной или представлять как отдельное свойство.
6. Старайтесь не хранить приватные данные на сервере, а если хранить всё-таки приходится - делайте это в базе данных в зашифрованном виде. Это сильно усложнит работу хакера, даже если он уже забрался на ваш сайт.
Специалисты хорошо знают аксиому: "если один человек смог создать защиту - найдется человек, который её взломает". Очевидно, что идеально защищённых скриптов и серверов не существует и работы по повышению безопасности должны вестить постоянно (по мере обнаружения новых дыр и багов).
Защита данных
Необходимость хранения приватных данных на сайте (например, базы клиентов), вынуждает разработчиков встраивать в сайт специальные системы защиты. Чаще всего используются два варианта: HTTP-аутентификация или парольная защита.
HTTP-аутентификация более надёжна, но менее удобна в администрировании. Кроме того, пользователь обычно не может самостоятельно зарегистрироваться - его должен зарегистрировать один из администраторов или модераторов сайта.
Парольная защита требует от программиста больше усилий по разработке и отладке, является менее надёжной, но при этом даёт больше возможностей пользователям по управлению своим аккаунтом.
На сайтах зачастую используются оба метода одновременно: парольную защиту устанавливают для обычных пользователей и HTTP-аутентификацию для входа в раздел администраторов.
Последовательность организации каждого из указанных методов мы рассмотрим в соответствующих уроках этого раздела.