Комплексная защита веб-приложений: как устранить распространённые ошибки разработчиков и обезопасить данные

Комплексная защита веб-приложений: как устранить распространённые ошибки разработчиков и обезопасить данные

Изображение: Christin Hume (unsplash)

Веб-приложения постоянно усложняются, становится всё шире их функционал, включая взаимодействие с большим количеством данных, API и сторонними сервисами. Из-за их комплексности увеличивается поверхность атаки, вследствие чего сами приложения становятся более уязвимыми. К тому же развиваются и кибератаки, появляются всё новые методы и инструменты взлома систем и устройств. Для обеспечения высокого уровня защиты приложений разработчики должны быть в курсе последних угроз и постоянно адаптировать свои стратегии защиты. Веб-приложения хранят и обрабатывают огромное число конфиденциальных данных, что делает их привлекательной целью для киберпреступников. А утечка или компрометация данных может привести к крайне серьезным последствиям.

Мы составили список самых распространённых ошибок разработчиков и объяснили, как их устранить или избежать. Начнём с тех, которые наиболее актуальны для нас сегодня:

I. SQL-инъекции

В отношении SQL-инъекций наиболее часто встречаются две ошибки: прямая вставка пользовательских данных в SQL-запросы и отсутствие экранирования специальных символов.

Для того, чтобы устранить их, необходимо использовать подготовленные выражения (prepared statements) и применять ORM, выполнять параметризованные запросы и осуществлять систематическую проверку типов входных данных.

II. Cross-Site Scripting

В области XSS (Cross-Site Scripting) у разработчиков может не быть фильтрации пользовательского ввода. Другая проблема – прямой вывод непроверенных данных.

Этих ошибок можно избежать благодаря экранированию специальных символов, валидации входных данных и использованию специальных библиотек для очистки данных и Content Security Policy (CSP).

III. CSRF (Cross-Site Request Forgery)

Основные ошибки здесь – это отсутствие проверки источника запроса и недостаточная защита форм.

Устранить эти проблемы можно благодаря следующим мерам: использованию CSRF-токенов, SameSite Cookies и Double Submit Cookie, а также проверки заголовка Referer.

IV. Управление сессиями

В рамках аспекта управления сессиями наиболее часто встречаются две важные проблемы, а именно: небезопасная передача session ID и отсутствие таймаута сессий.

Здесь критически важно использовать secure- и httpOnly-флаги для cookies, осуществлять регенерацию session ID после авторизации и проводить настройку таймаута сессий.

V. FileUpload уязвимости

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

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

Проблемы могут возникнуть и на самом базовом уровне разработки – здесь всё зависит от специалиста и качества его работы. Тем не менее, приведём несколько примеров самых «примитивных» ошибок, с которыми нужно уметь справляться:

  • Хранение паролей

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

Однако исправить эту ситуацию довольно просто: достаточно использовать современные алгоритмы хеширования (такие, как bcrypt, Argon2) и принцип многократного хеширования и добавлять в пароли соль (salt).

  • Аутентификация

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

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

  • Настройки сервера

Решение проблем, связанных с настройками сервера в большинстве случаев связано с обновлением ПО и используемых сервисов. Нельзя забывать и про использование HTTPS, а также проверку настройки заголовков безопасности.

Также в целях повышения уровни защищённости разработки веб-приложений рекомендуется проводить регулярный аудит безопасности, использовать WAF (Web Application Firewall), осуществлять внедрение SAST- и DAST-инструментов и продолжать обучение разработчиков основам безопасности.

В рамках мониторинга и реагирования на инциденты необходимо:

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

В рамках тестирования же важно периодически устраивать penetration testing, security code review, автоматизированное тестирование безопасности и, наконец, регулярные проверки конфигураций.

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

Автор: Григорий Базоян, ведущий пресейл-инженер 2 категории Cloud Networks.

Сloud Networks
Автор: Сloud Networks
Поставщик IТ-решений и услуг Cloud Networks (юридическое название ООО «Облачные сети») оказывает полный цикл услуг по построению ИТ-инфраструктуры и комплексных систем ИБ.
Комментарии: