Защита Rails-приложений: Практические рекомендации и инструменты от full-stack разработчика

26.11.22, Сб, 10:15, Мск,

Несмотря на доминирование мобильных приложений, веб-версии остаются актуальными — количество открытий веб-страниц выросло на 57% в 2021 году (по данным Amplitude Labs). Разработчикам это даёт необходимость обеспечения повышенной безопасности и нужных для этого ресурсов за счёт использования актуальных инструментов.

Содержание

Один из лучших инструментов для веба — Ruby on Rails. Специально для этой статьи Иван Гришков рассказал, как с помощью Rails избежать уязвимостей и защитить данные пользователей. Он подчеркнул, что новичкам легко совершить ошибки, но грамотное использование фреймворка помогает повысить безопасность и эффективность работы.

Иван Гришков

Доверяй, но проверяй

Ruby on Rails сегодня — ключ для монолитных интегрированных систем. Фреймворк, написанный на языке программирования Ruby, предоставляет набор инструментов и библиотек, благодаря которым можно сосредоточиться на написании уникального кода, не отвлекаясь на настройку и конфигурации приложения.

«
«Rails предлагает встроенные механизмы защиты, такие как CSRF и XSS. Однако ошибки в настройках, например, в политике Content Security Policy (CSP), могут оставить приложение уязвимым. Разработчику важно регулярно проверять безопасность и обновлять зависимости», — отмечает Иван Гришков.
»

Выявляется главное преимущество Ruby on Rails: встроенные функции защиты. Этим фреймворк и подкупает разработчиков, уверен Гришков, но предостерегает:

«
«Программная платформа не может учесть всех деталей, особенно при работе с персональными данными и финансами. Хотя Rails защищает от таких атак, как SQL-инъекции, XSS и CSRF, важно регулярно проверять код и следовать лучшим практикам безопасности, поскольку уязвимости могут возникнуть из-за человеческих ошибок или невнимания к деталям».
»

Учитывайте локальные стандарты безопасности

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

В каждой стране свои требования безопасности. Если в России действует стандарт шифрования ГОСТ, то в большинстве других стран, например в США и странах ЕС, преобладает стандарт AES или другие международные криптографические протоколы. Это создаёт вызов для разработчиков, когда необходимо обеспечить совместимость между системами, использующими разные методы шифрования.

«
«Использование Российского ГОСТ-шифрования в проектах на Ruby on Rails не является общепринятой практикой. Для этого необходимо использовать сторонние библиотеки, такие как OpenSSL, которая поддерживает ГОСТ через специальные расширения и патчи. Так как это не является встроенной возможностью самого Ruby и тем более Rails, от разработчиков требуются дополнительные настройки и интеграции внешних решений. Эти усилия оправданы, ведь они позволяют приложениям соответствовать стандартам международного шифрования, не нарушая требований локальных законодательств. Однако данные требования и стандарты безопасности важно учитывать уже на этапе проектирования», — отмечает Иван Гришков.
»

Суммарно, эти два правила формируют подход «используй фреймворк, но проверяй, дорабатывай и локализуй», который уже помог Ивану Гришкову решить не одну амбициозную задачу. Разработчик поделился на примере, как это можно применить в реальной задаче.

Обновляйтесь и будете сильнее

Защитить Rails-приложение помогут обновления. Rails и его библиотеки («гемы») постоянно совершенствуются, чтобы исправить уязвимости и улучшить функциональность. Регулярное обновление зависимостей поможет избежать использования версий с уже известными недочётами.

«
«Регулярно проверяйте файлы на наличие устаревших или уязвимых версий библиотек. Для этого используйте Bundler Audit, который проверяет `гемы` на наличие известных уязвимостей и проблем с зависимостями. Bundler — это пакетный менеджер, который управляет установкой зависимостей, а Bundler Audit помогает выявлять проблемы с безопасностью. Также важно использовать инструмент Brakeman — это бесплатный сканер уязвимостей, специально разработанный для приложений на Ruby on Rails, который статически анализирует код и обнаруживает потенциальные проблемы безопасности на любом этапе разработки», — отметил Иван Гришков.
»

Такие инструменты, как Brakeman и Bundler Audit отлично подходят для анализа безопасности и зависимостей, потому что с их помощью можно не только обнаружить слабые места, но и получить рекомендации по их исправлению. Это особенно важно, когда речь идёт об электронных деньгах.

Проектируйте архитектуру с точки зрения безопасности

Зачастую разработчики могут приоритизировать скорость решения задачи стандартам безопасности. Особенно часто с этим встречаются специалисты, которые разрабатывают только либо backend, либо frontend. С Ruby on Rails можно учесть и то, и то.

Усиление защиты

Защита Rails-приложения требует комплексного подхода, включающего различные инструменты и методы. Один из них, по словам Ивана, Content Security Policy (CSP) — это мощный инструмент, который помогает защитить ваше приложение от XSS-атак (межсайтовый скриптинг) и других типов атак, связанных с загрузкой и выполнением вредоносных скриптов. CSP позволяет контролировать, какие ресурсы могут быть загружены и выполнены на странице, что значительно уменьшает поверхность атаки.

«
«Cross-Site Scripting (XSS) — одна из распространённых атак, с которой можно столкнуться при разработке. Чтобы её избежать, важно применять фильтрацию ввода данных и использование встроенных функций Rails, таких, как html_safe, для корректной обработки пользовательских данных», — объясняет Иван Гришков.
»

Более того, CSP позволяет точно указать, какие ресурсы — скрипты, стили, изображения — могут быть загружены с определенных доменов, что помогает предотвратить загрузку и выполнение ресурсов с ненадёжных источников, отмечает эксперт.

Защита от DDoS-атак

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

«
«Самый частый вид атак — это попытки перебора паролей. Для защиты от подобного взлома используется простой инструмент предотвращения троттлинга — Rack::Attack, который можно настроить и для блокировки подозрительных IP-адресов, и ограничения числа попыток входа в систему», — делится Иван Гришков.
»

Пример настройки Rack::Attack:

Image:Пример_настройки_Rack_Attack.jpg

Этот пример показывает, как использовать Rack::Attack для защиты приложения от различных видов атак. Настройки включают блокировку IP-адресов для подозрительных URL-адресов, ограничение числа попыток на безопасных маршрутах, а также ограничение регистрации новых пользователей. Это помогает уменьшить вероятность успешных атак и обеспечить безопасность приложения.

Для крупных проектов, представляющих интерес для злоумышленников, особенно тех, кто работает с финансами, необходимо рассмотреть более серьёзные меры защиты. Например, на базе DNSSEC, которую предоставляет Cloudflare, или более комплексные инструменты, такие как AWS WAF со встроенным сетевым фаерволом и динамической защитой от распространённых атак, таких как SQL-инъекции или XSS. Эти меры позволят значительно усилить безопасность приложения и предотвратить атаки ещё на ранних стадиях.

Ключевые выводы

Фреймворки, такие как Ruby on Rails, ускоряют разработку, облегчая рутинные задачи и повышая безопасность веб-продуктов. Но каждая система уникальна и может содержать уязвимости, требующие доработок и обновлений. Фреймворки дают базовую защиту, но ответственность за безопасность лежит на разработчике. Важно учитывать её с самого начала, регулярно проводить аудит и обновлять ПО.

«
«В конечном счёте, использование Ruby on Rails по этим правилам помогает быстрее создавать надёжные решения, соответствующие высоким стандартам безопасности и потребностям клиентов», — заключил Иван Гришков.
»


Автор: Дмитрий Архипов