Есть миллион причин провала технологических проектов. Неправильно просчитанные бизнес-модели, завышенный спрос или растущие расходы – вот что вы называете. Но за свою профессиональную жизнь я видел немало проектов с блестящими идеями и хорошим потенциалом, которые терпели крах из-за, казалось бы, незначительных ошибок и оплошностей. И я думаю, что эта причина самая горькая из всех, по крайней мере для меня как разработчика. В этой статье я хочу поделиться своим опытом и проанализировать проблемы и задачи, с которыми сталкиваются бэкенд-разработчики, работая над веб-приложениями. Я выделю ключевые моменты, которые часто упускают из виду, и объясню, как устранить эти препятствия с максимальной эффективностью. Уверен, это поможет вам минимизировать риски и существенно повысить шансы вашего проекта на успех.
Как бы очевидно это ни звучало, этот момент имеет решающее значение: никогда не храните конфиденциальную или чувствительную информацию в исходном коде. Нарушения могут привести к финансовым потерям и другим серьезным проблемам. Конфиденциальная информация, которую никогда не следует хранить в коде, включает в себя:
Вместо хранения такой информации в коде проекта используйте переменные среды. Для более безопасных систем рассмотрите возможность использования надежных решений для секретного хранения, таких как
Если вы считаете, что хранение конфиденциальной информации в коде приложения не является серьезной проблемой, подумайте вот о чем: только в 2022 году GitHub обнаружил
Решение: проверьте свой проект прямо сейчас
Если у вас уже есть проект и вы беспокоитесь о секретах в своем коде, есть удобные решения, которые принесут вам душевное спокойствие. Ручные проверки могут занять много времени, поэтому автоматизация имеет ключевое значение. Полезные инструменты включают в себя:
Эти инструменты — лишь несколько примеров; другие популярные варианты включают в себя
Удивительно, но эта тема редко обсуждается, а некоторые разработчики даже не подозревают, что использование сторонних решений может привести к юридическим проблемам и существенным проблемам для их компании. Не верите мне? Представьте себе такой сценарий: разработчик небольшой компании включает библиотеку, распространяемую под
Серьезные проблемы также могут возникнуть в проектах, использующих библиотеки с лицензиями, которые явно запрещают коммерческое использование. И не становится лучше, если лицензии вообще нет: на самом деле отсутствие лицензии представляет собой существенную проблему, поскольку любой код по умолчанию защищен авторским правом. Лицензии дают пользователям право использовать код при определенных условиях, но без лицензии вообще нет юридических оснований для использования кода, даже если он общедоступен.
Стоит отметить, что вопросы лицензирования могут затронуть вас по-разному в зависимости от вашей юрисдикции: этот вопрос особенно актуален для стран, подписавших международные соглашения об авторском праве. Например, Бернская конвенция по охране литературных и художественных произведений, один из основных международных договоров в этой области, в настоящее время насчитывает около 180 стран-участниц. Таким образом, использование кода без явного разрешения будет означать нарушение закона об авторском праве и может привести к юридическим баталиям во многих местах по всему миру. Однако это не значит, что вам следует переехать в «комфортную» страну только для того, чтобы нарушить все писаные и неписаные правила. Давайте уважать друг друга, и если кто-то не хочет, чтобы его разработки использовались в определенных целях, лучше не делать этого, даже с человеческой точки зрения.
Решение: используйте автоматические проверки и обновления.
Как видите, вопросы лицензирования и авторских прав сложны. Чтобы заранее обезопасить себя и свою компанию, лучше всего проверить лицензии используемых вами библиотек и программного обеспечения. Для библиотек это не так уж сложно; современные пакетные менеджеры уже имеют для этого инструменты. Например, в PHP-композиторе это можно сделать с помощью команды `
И не забывайте вызывать эти команды при обновлении зависимостей (еще лучше автоматизировать эти проверки), ведь в новых версиях лицензия подключаемой библиотеки может меняться.
В веб-разработке обычно имеется несколько версий проекта, таких как разработка (dev), обеспечение качества (QA), подготовка и производство. Я часто сталкивался со сценариями, когда версии для разработки/QA и промежуточные версии сайта или веб-проекта были доступны любому пользователю в Интернете. Вызывает тревогу то, что тестовые версии иногда могут индексироваться поисковыми системами более эффективно, чем основная версия, что обычно вредит продукту.
Основная проблема здесь заключается в том, что тестовые версии могут содержать ошибки или конфиденциальную, возможно, даже компрометирующую информацию. Кроме того, бета-версии обычно более уязвимы для взлома, чем финальная версия. Это означает, что их доступность увеличивает риск получения злоумышленником доступа к конфиденциальным данным, внутреннему коду или даже самому серверу. Это особенно актуально, если вы разрабатываете серверную часть для чего-то вроде мобильного приложения, поскольку несанкционированный доступ к тестовым версиям API может быть чрезвычайно опасным.
Помимо угроз безопасности, дубликаты веб-страниц могут негативно повлиять на рейтинг в поисковых системах. Поисковые системы, такие как Google, могут рассматривать эти дубликаты как нежелательный контент, потенциально снижая рейтинг исходных страниц вашего проекта или даже полностью удаляя их из индекса.
Решение: Разработайте свою стратегию безопасности с самого начала.
Не экономьте на доменах. Если вам нужна тестовая версия, доступная онлайн, купите специально для нее отдельный домен. Эта простая, но эффективная мера снижает риски безопасности, поскольку злоумышленники обычно сначала проверяют субдомены. Размещение тестовой версии на любом поддомене основного ресурса делает ее легкой добычей.
Ограничить доступ ко всем тестовым версиям. Убедитесь, что версии для разработки, контроля качества, промежуточные версии и другие версии не являются общедоступными. Например, настройте их так, чтобы они были доступны только через VPN. Это снижает вероятность несанкционированного доступа, даже если тестовый домен станет известен злоумышленникам.
Защитите тестовые версии от индексирования. Даже если ваши тестовые версии доступны только через VPN и размещены на отдельных секретных доменах, защитите их от индексации поисковыми системами с помощью файла robots.txt или метатегов noindex. Этот шаг имеет решающее значение, поскольку поисковые системы иногда могут находить и индексировать эти страницы неожиданным образом.
Существуют правила безопасности, которые многие разработчики склонны игнорировать, несмотря на то, что они критически важны и созданы на основе тяжело усвоенных уроков. Одно из таких правил — всегда скрывать реальный IP-адрес вашего проекта. Если IP-адрес ваших серверов можно определить по имени домена, это может привести к нескольким проблемам, таким как:
DDoS-атаки. Зная реальный IP-адрес вашего проекта, злоумышленники могут запустить распределенную атаку типа «отказ в обслуживании» (DDoS) на ваш сервер. Например,
Выявление потенциальных уязвимостей. Серьезные хакеры, а не только любители, могут сканировать открытые порты и доступное в сети программное обеспечение, чтобы найти и использовать слабые места. Даже такие известные сервисы, как MongoDB, сталкивались с серьезными утечками данных из-за неправильной конфигурации. Многих из этих проблем можно было бы избежать, просто скрыв настоящий IP-адрес.
Решение: усложнить жизнь потенциальному злоумышленнику
Скрывая реальный IP-адрес вашего сервера, вы значительно усложняете атаку злоумышленников на вашу систему. Использование сети доставки контента (CDN) или служб защиты от DDoS может быть здесь очень эффективным. Популярные варианты включают в себя
Хотя эти инструменты могут значительно повысить безопасность, есть дополнительные соображения, которые следует учитывать:
Утечка IP-адреса заголовка электронной почты. Если вы используете свой основной сервер для отправки электронных писем, реальный IP-адрес может быть раскрыт в заголовках электронных писем, что сведет на нет ваши усилия по обеспечению безопасности.
История IP и запросы Whois: такие услуги, как
Защита от DDoS и конечные точки API. Будьте осторожны при использовании защиты от DDoS для доменов, выступающих в качестве конечных точек API. Системы защиты могут вводить этапы проверки пользователей, которые могут нарушить работу ваших клиентских приложений, заменяя ответы JSON/XML кодом HTML.
Исходящие запросы API. Когда ваш сервер отправляет запросы к сторонним API, он может непреднамеренно раскрыть свой IP-адрес. Использование прокси-серверов для таких запросов может помочь, поскольку сменить прокси-сервер проще, чем бороться с последствиями атаки.
Важно помнить, что сокрытие реального IP-адреса вашего проекта не является панацеей. Закрытие портов, используемых вашим программным обеспечением, из внешней сети крайне важно везде, где это возможно. Изменение стандартных портов — спорная практика; некоторые эксперты утверждают, что это усложняет настройку без существенных преимуществ. Часто предпочтительнее настроить программное обеспечение для взаимодействия через сокеты Unix вместо сетевых TCP-соединений (если и ваш проект, и программное обеспечение работают на одном сервере). Такой подход не только увеличивает скорость взаимодействия, но и повышает безопасность, устраняя необходимость в открытых портах.
Для систем управления базами данных (СУБД) или других внутренних служб на отдельных серверах убедитесь, что доступ ограничен определенными IP-адресами, которые вы строго контролируете. Такая настройка предотвращает несанкционированный доступ к критически важным системам, добавляет дополнительный уровень безопасности и минимизирует риски внешних атак и утечек данных.
Этот совет довольно прост, но, опять же, его часто упускают из виду: регулярно обновляйте зависимости вашего проекта и серверное программное обеспечение. Устаревший и уязвимый код — мечта злоумышленников, которые могут легко его использовать.
Решение: автоматизируйте обновления.
Вам не нужно обновлять все вручную; многие инструменты автоматизации могут помочь. Например,
Автоматизация обновления сертификатов безопасности также имеет решающее значение. Если вы используете
\Тот же принцип применим и к серверному программному обеспечению. Если вы работаете с Linux, особенно с дистрибутивами на базе Debian/Ubuntu,
Приведенные здесь советы — лишь малая часть того, что нужно помнить бэкэнд-разработчикам. Я решил выделить важные, но менее часто обсуждаемые темы по сравнению с распространенными, такими как
Для более глубокого понимания безопасности веб-приложений рассмотрите возможность изучения
Я считаю, что сообщество разработчиков должно быть одновременно знающим и готовым делиться идеями и опытом. Поэтому приглашаю всех поделиться своими наблюдениями и комментариями, которые ценны для всех, кто занимается backend-разработкой!