Основные проблемы безопасности веб-сайтов

Какие же недостатки наиболее часто встречаются, на что следует обратить внимание при разработке сайта?

 
1. Поверхностная проверка прав
С этой проблемой чаще всего сталкиваются те, кто заказывает сайт у неопытных программистов. Просто подменив адресную строку, значение скрытого поля или переменной в клиентском скрипте, злоумышленник может выполнить недоступное ему действие: удалить или отредактировать объект, который ему не принадлежит, просмотреть недоступную информацию или вызывать на выполнение скрипт, на который у него нет прав.
Защититься от таких манипуляций довольно просто: достаточно при всех действиях, которые основываются на роли пользователей, проводить в коде проверку на соответствующие разрешения.
 
2. SQL Injection
Этот тип атак получил распространение в 2000-х годах и до сих пор преследует много сайтов. Суть его заключается в том, чтобы подменить параметр, который формирует запрос к базе данных, специальным скриптом, который выполнит нужный злоумышленнику код на стороне БД. Таким кодом может быть удаление данных, внесения изменений в существующие данные без разрешения на это, вывод на экран секретной информации или просто вывод из строя сайта жертвы.
Для защиты нужно перед выполнением запросов к БД проверить параметр на правильность типа данных. Сложнее, когда параметр должен быть текстового типа и по определенным причинам может оказаться в составе запроса (ограничения языка программирования или технические нюансы). Тогда на помощь приходят экранация символов и проверка текста на вхождение опасных слов.
 
3. XSS
Эта уязвимость позволяет вывести на странице сайта HTML или JavaScript код злоумышленника. Чаще всего это бывает тогда, когда программист выводит на страницу текст в таком виде, как он был введен пользователем, не проводя проверки на наличие недопустимых тегов. Этот текст может быть комментарием на сайте или другой произвольной записью, которые может оставить пользователь. Как результат - при открытии пораженной страницы посетитель сайта может видеть неверный контент или будет перенаправлен на другой сайт.
Выход один: проверять введенный пользователями текст на наличие недоступных тегов и избавляться от них, в чем поможет экранация символов. Также возможна ситуация, когда хакер получил доступ к базе данных и внес туда такой текст. В этом случае поможет именно проверка при выводе информации, а не при занесении в БД.
 
4. Спам
Незащищенные формы ввода - основной источник спама на сайтах. Результатом является наличие рекламы или текста без содержания на страницах сайта. Этот контент вносится программами-роботами и массово заполняет целевой ресурс. В худшем случае робот может быть направлен на внесение очень больших объемов данных, что приводит к мгновенному увеличению занятого места на хостинге.
Спасение от спама прост - проверка действительно ли операция выполняется человеком. Сделать это можно используя элемент управления CAPTCHA.
 
5. Уязвимые клиентские скрипты
В отличие от серверных скриптов, клиент с легкостью может модифицировать клиентские скрипты (JavaScript). Поэтому программисту следует убедиться, во-первых, чтобы последние не содержали паролей или других тайных данных, во-вторых, чтобы с них не проводился прямой вызов действий, которые являются зависимыми от роли пользователя. Найдя такую уязвимость, злоумышленник именно с нее начнет атаку на сайт жертвы.
 
6. DDoS
Целью такой атаки является вывести целевой сайт из строя таким образом, чтобы целевой пользователь не смог получить доступ к нужной ему информации. Обычно при DDos-атаках на сайт жертвы ссылается большое количество запросов, которые он не успевает обработать, при этом сайт может выйти за рамки отведенных ресурсов, что приведет к его перезапуску.
Обойти такую атаку на уровне кода просто - нужно правильно построить логику кэшей и распознавания атак. Также следует помнить об ограниченности ресурсов на сервере и адаптировать сайт к большому количеству потенциальных посетителей.
 
7. Подмена Cookies
Cookies - это определенные записи, которые оставляет сайт на компьютере пользователя для дальнейшего распознавания при последующих визитах, а также для сохранения определенных параметров. Если на сайте аутентификация пользователей реализована с недостаточным уровнем безопасности, то хакеру достаточно легко распознать нужные ему Cookies и подменить их, чтобы получить большие привилегии доступа.
При обнаружении такой проблемы следует немедленно модифицировать логику аутентификации и проверить не содержат Cookies другой уязвимой информации. Также программистам не следует забывать о времени жизни таких клиентских записей и ограничивать их по необходимости.
 
Опытные программисты обычно не допускают возникновения вышеописанных проблем и хорошо понимают важность обеспечения программного продукта или сайта надлежащим уровнем безопасности, но начинающие и те, кто не сталкивался с проблемами безопасности, могут создать «дыры» (security holes) и облегчить работу злоумышленникам. При разработке сайта обращайтесь к профессионалам, ведь в будущем придется заплатить дважды за допущенные дилетантами ошибки.
 

Автор