Подборка полезных публикаций для веб-мастеров и заказчиков

Как обезопасить свой веб-сайт?

26.05.2020 | habr.com



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

Этот небольшой, но важный список конкретных действий, который следует производить каждому со своим веб-ресурсом, если репутация компании, безопасность веб-ресурсов и данных клиентов – это не пустые слова для вас.

Можно выделить несколько основных способов защитить свой сайт:
 

  • обеспечить защиту от DDoS-атак;
  • подключить SSL-сертификат;
  • использовать надёжный хостинг;
  • использовать безопасные плагины/библиотеки/фреймворки/CMS (далее – «сторонние модули»);
  • применять существующие техники защиты от SQL-инъекций и XSS-атак;
  • обеспечить ведение журнала веб-сайта и мониторинг событий безопасности;
  • производить регулярное резервное копирование веб-сайта и всех важных данных;
  • использовать надёжные и сложные пароли, а также защиту от перебора паролей;
  • в случае наличия административной панели, с помощью которой происходит управление содержимым веб-сайта, необходимо изменить стандартный адрес входа и обеспечить контроль доступа.


Естественно, у каждого пункта есть своё «но» и ряд подпунктов, на которых следует заострить внимание. Также их можно разделить на подгруппы исходя из следующих соображений: одни действия требуют одноразового подключения, настройки и редких проверок работоспособности (настройка хостинга и SSL-сертификата), а другие подразумевают под собой постоянные проверки, обновления и требуют пристального внимание (всё остальное).
 

Надёжный хостинг и SSL


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

Защита от DDoS


Если ваш хостинг-провайдер предоставляет услуги защиты от DDoS-атак или вы пользуетесь услугами анти-DDoS-сервисов, то этот вопрос можно считать закрытым, но почему бы не усилить защиту и не организовать её своими руками, что несомненно является трудоёмкой задачей и подразумевает одновременное использование следующих техник: если в качестве веб-сервера используется Apache, то необходимо поставить перед ним кеширующий прокси – Nginx или Lighttpd, а лучше на фронтенде использовать Nginx, но с несколькими надстройками (ограничить размеры буферов и соединения в Nginx, настроить тайм-ауты и т.п.; использовать модуль testcookie-nginx; использовать фильтрацию по URL и отдавать нестандартный код 444, который позволяет закрыть соединение и не отдавать ничего в ответ); в некоторых случаях использовать блокировку по географическому признаку; автоматизировать процесс анализа логов веб-сайта, обращая особое внимание на объём трафика, время ответа сервера, количество ошибок и количество запросов в секунду.
 

Безопасность сторонних модулей


Что касается рекомендации, относящейся к использованию безопасных сторонних модулей в своих приложениях, то эта тема пожалуй одна из самых важных, ведь большинство вредоносных атак происходит через сторонние модули. Суть данного пункта заключается в том, чтобы использовать фреймворки и библиотеки со встроенными функциями безопасности, которые помогут разработчикам свести к минимуму появление уязвимостей в процессе реализации. Хотелось бы выделить более детальные рекомендации, касаемо данного пункта: используйте сторонние модули из доверенных источников, которые поддерживаются сообществом и активно разрабатываются; поддерживайте в актуальном состоянии список всех сторонних модулей; используйте только тот функционал, который требуется в рамках вашего приложения.
 

SQL-инъекции и XSS-атаки


Рекомендация, относящаяся к обеспечению защиты от SQL-инъекций и XSS-атак, требует самого подробного объяснения, ведь целью злоумышленников здесь являются конкретные данные из базы данных (SQL-инъекция) и пользовательские данные (XSS-атака). Стоит также понимать, что вопросы, связанные с SQL-инъекциями, затрагивают обширный раздел, посвящённый обеспечению безопасного доступа ко всем хранилищам данных, включая реляционные базы данных и базы данных NoSQL, и включают вопросы безопасности запросов (необходимо избегать нелегитимных входных данных в составе SQL-команд и наилучшим решением является использование параметризованных запросов, которые можно применять к конструкциям SQL/OQL и хранимым процедурам), конфигурации (необходимо убедиться в корректной настройке имеющихся средств обеспечения безопасности СУБД и платформы, на которой она установлена), аутентификации (должна выполняться по защищенному каналу) и соединений (в связи с существованием нескольких способов взаимодействия с базой данных (посредством службы или API), необходимо обеспечить безопасность соединений с помощью шифрования и аутентификации).

Что касается межсайтового выполнения сценариев (XSS-атака), то в данном случае последствия средней степени тяжести могут нанести отражённая XSS или XSS на основе объектной модели документа (DOM), а к серьезным последствиям может привести межсайтовое выполнение хранимых сценариев с исполнением кода в браузере пользователя с целью кражи учётных данных, перехвата сессий или установки вредоносного программного обеспечения. Главной мерой защиты в данном случае является экранирование (добавление определённых комбинаций символов перед символами или строками для недопущения их некорректной интерпретации), кодирование данных (преобразование определённых символов в комбинации символов, которые не представляют опасности для интерпретатора) на стороне сервера и использование набора HTTP-заголовков, в частности, Set-Cookie с параметрами HttpOnly и Secure, а также X-XSS-Protection со значением 1.

Общей мерой защиты, используемой для предотвращения внедрения SQL-кода и межсайтового выполнения сценариев, является проверка всех входных данных на соответствие синтаксической и семантической норме. Под синтаксической нормой следует понимать полное соответствие входных данных ожидаемой форме представления, а семантическая норма свидетельствует о том, что входные данные не выходят за пределы конкретного функционала.
 

Журналирование и мониторинг


Рекомендация, относящаяся к журналированию всех событий и мониторингу событий безопасности, уже упоминалась при рассмотрении методов защиты от DDoS-атак, но в данном случае рассматривается более широкая сторона вопроса, связанная с обнаружением атак и противодействием им, а также расследованием уже случившихся инцидентов безопасности. Таким образом, кроме стандартных средств журналирования, предоставляемых веб-сервером, необходимо убедиться в регистрации времени события и идентификатора пользователя, а также потенциально опасной активности, характерной для вашего веб-сайта. В случае обнаружения вредоносной активности ваше приложение должно заблокировать пользовательскую сессию или заблокировать по IP-адресу, в общем принять меры и сообщить об этом администратору. Тут уже речь идет о таких средствах, как WAF или IDS/IPS.
 

Бэкапы


Что касается регулярного резервного копирования веб-сайта и всех данных, то здесь необходимо задуматься о месте и виде хранении этих данных. Эффективным способом является шифрование хранилищ критичных данных и резервных копий, а также хранение файлов резервных копий не на файловой системе, а в другом месте, в безопасности которого нет сомнений и которое всегда будет под рукой для быстрого развёртывания.
 

12345 или qwerty?


Рекомендация по использованию надежных и сложных паролей не только и не столько про пароли, а в целом про аутентификацию и управление сессиями пользователей. Существует три уровня аутентификации и использование только паролей относится лишь к первому – самому простому уровню (второй – многофакторная аутентификация; третий – аутентификация на основе шифрования). Однако даже здесь есть ряд требований к самим паролям, механизму восстановления пароля, а также к безопасному хранению паролей. Управление сессиями позволяет контролировать состояние аутентификации пользователя для работы с веб-сайтом без повторной аутентификации. К сессиям также предъявляются требования к созданию и завершению.
 

Защита административной панели


Заключительной рекомендацией является защита административной панели веб-сайта, ведь она является одним из слабых мест в общей системе из-за обширного функционала, связанного с добавлением/редактированием постов и страниц, работой с файлами и многим другим. Поэтому важным условием является обеспечить надлежащий контроль доступа, а также максимальную скрытность от злоумышленников местонахождения административной панели, реализуемую простым переносом адреса на нестандартный и максимальной защитой данной точки входа посредством защиты от перебора, фильтрации по IP-адресам и т.д. При создании системы контроля доступа следует придерживаться следующих принципов: отправка всех запросов через систему контроля доступа; запрет доступа по умолчанию (т.е. отклонять запрос, если он не был разрешен специально); минимальные привилегии для всех пользователей, программ или процессов; отказ от использования ролевой модели управления доступом, жёстко заданной в коде; регистрация всех событий, связанных с контролем доступа.
 

Вывод


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

сохранить ссылку