Как соблюдать правила безопасности на GitHub

Источник: DZone GitHub заслуженно считается самой популярной платформой командной разработки. По данным за прошлую осень, этим сервисом пользовалось более 40 миллионов программистов. И поскольку большинство из них при создании софта использует открытый код, безопасность при работе на Github должна быть вашим главным приоритетом. Повторное применение кода увеличивает риск распространения уязвимостей. А значит, каждый пользователь GitHub должен уделять максимум внимания созданию безопасной среды разработки.Кофе-брейк #35. Как соблюдать правила безопасности на GitHub. Полезные советы по быстрой отладке Java-кода - 1Существует 8 правил, которым необходимо следовать, чтобы ваш код в GitHub был в безопасности.

Обеспечьте контроль доступа

Контроль доступа — один из лучших способов повысить безопасность не только на GitHub, но и в любой другой среде, где требуется защита кода. GitHub предлагает несколько способов снизить риски в работе. Прежде всего, возьмите за правило предоставлять наименьшие привилегии — выделяйте пользователям репозитория только те разрешения, которые им необходимы для выполнения работы. Существуют и другие методы контроля доступа, которым вы должны следовать:
  • ограничьте создание хранилищ, чтобы пользователи не могли раскрывать информацию об организации в общедоступных репозиториях;
  • включите защиту веток и проверки состояния, чтобы пользователи могли объединять коммиты или безопасно управлять ветками;
  • разрешите или запретите ветвление частных репозиториев, чтобы гарантировать, что пользователи не будут раскрывать или передавать ваш код посторонним лицам;
  • отмените доступ для всех неактивных пользователей, которые больше не являются участниками вашего сообщества или сотрудниками компании;
  • периодически проверяйте права доступа к вашим проектам на GitHub;
  • убедитесь, что пользователи не делятся с другими доступом к учетной записи GitHub или паролями;
  • убедитесь, что каждый пользователь репозитория использует двухфакторную аутентификацию в своей учетной записи;
  • периодически меняйте персональные токены доступа и ключи SSH.

Никогда не храните данные доступа в ваших файлах GitHub

Утечка информации о доступе к вашему репозиторию GitHub через код, файлы конфигурации или сообщения коммитов могут использовать для атак. Чтобы предотвратить добавление конфиденциальных данных в ваш репозиторий, используйте инструменты управления доступом — git-secrets или vault. Эти инструменты сканируют базу кода и меняют доступ к ней всякий раз, когда в вашем коде или файлах конфигурации обнаруживается конфиденциальная информация. Если вы нашли конфиденциальную информацию в своем репозитории GitHub, вы должны немедленно ее удалить. Но поскольку GitHub хранит историю всех коммитов в вашем репозитории, одного удаления данных недостаточно. Вам нужно будет удалить файлы из истории вашего репозитория GitHub. Важным шагом для повышения безопасности станет замена всех паролей и токенов, которые ранее появлялись в открытом доступе.

Включите оповещения для уязвимых зависимостей

Поскольку пользователи GitHub работают над большим количеством проектов, становится все труднее контролировать растущее число зависимых объектов. К счастью, GitHub предоставляет автоматические оповещения для уязвимых зависимостей, обнаруженных в репозитории. Эти предупреждения основаны на Национальной базе данных уязвимостей (NVD), GitHub Security Advisories и базе данных уязвимостей WhiteSource, которая поддерживает более чем 200 языков программирования. Благодаря оповещениям GitHub вам станет проще и более безопасно использовать библиотеки с открытым исходным кодом.

Проверяйте приложения, добавленные из GitHub

GitHub Marketplace содержит сотни приложений, написанных сторонними разработчиками и компаниями. Поэтому важно тщательно проверять каждое приложение, которое вы добавляете в свой репозиторий. При установке приложений из GitHub Marketplace следуйте таким правилам:
  • обеспечьте соблюдение принципа наименьших привилегий. Никогда не предоставляйте приложениям больше прав доступа, чем им требуется;
  • всегда подвергайте сомнению права доступа или разрешения, запрашиваемые приложением. Подумайте о том, какой ущерб это может нанести при таком уровне доступа;
  • проверьте информацию, что компания или разработчик приложения реально существуют, прежде чем предоставить им доступ к своему репозиторию на GitHub;
  • проверьте функции и безопасность приложения. Если в нем присутствуют уязвимости, вы можете стать жертвой взлома;
Безопасность приложения оценивается по его самой слабой части. Это относится и к репозиториям GitHub. Поэтому, прежде чем предоставлять приложению доступ к своему хранилищу, убедитесь, что вы доверяете ему, и что оно соответствует тому уровню доступа, который оно запрашивает.

Проверяйте весь импортированный из GitHub код

Разработчики часто используют чужой код. Каждый раз, когда вы копируете часть чужого кода в свой проект, проводите его полную проверку. Может показаться, что это лишняя трата времени, особенно для небольших проектов, но есть вероятность, что пренебрегая этим правилом вы внесете в свой репозиторий уязвимость. Еще один риск, связанный с импортированным кодом, заключается в том, что он может содержать конфиденциальную информацию, такую ​​как данные доступа. Если они хранятся в файлах GitHub, это создает еще одну угрозу безопасности. Аудит кода перед его копированием помогает выявить подобные лазейки. Не надейтесь на то, что чужой код безопасен, поскольку он находился в закрытом репозитории. Он вполне может нанести вред вашей кодовой базе.

Используйте автоматический статический анализ исходного кода для ваших репозиториев

Существует несколько сторонних инструментов, которые вы можете использовать для анализа вашего репозитория на наличие уязвимостей. Одним из них является WhiteSource Bolt — бесплатный инструмент из GitHub Marketplace. WhiteSource Bolt сканирует ваши репозитории на наличие уязвимостей во всех открытых частях кода. Он также предоставляет подробную информацию об уязвимостях и предлагает варианты исправления.

Используйте тот тариф GitHub, который соответствует вашим потребностям

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

Соблюдайте в своих проектах всестороннюю политику безопасности

Безопасность — это коллективная ответственность. Если вы работаете в команде, важно ввести правила безопасности, которым должны следовать все заинтересованные стороны. В идеале вы должны объединить команды кибербезопасности и разработки на этапе планирования, чтобы обеспечить их синхронную работу. Так будет проще обеспечить защиту в процесса разработки. Если один из членов вашей команды беспечно относится к хранению паролей или другой конфиденциальной информации, это может поставить под угрозу весь репозиторий. Чтобы избежать этого, четко задокументируйте процедуру обеспечения безопасности, которую должны выполнять все ваши коллеги.

Вывод

Защитить свой код на GitHub очень просто. Нужно лишь обеспечить правильный контроль доступа, используя преимущества встроенных функций безопасности GitHub. Если же вы заинтересованы в максимальной защите — интегрируйте дополнительные инструменты, которые повысят безопасность кода на всех этапах разработки. Также рекомендуется просмотреть разделы документации по безопасности GitHub для бизнеса и бесплатных пользователей. Так вы сможете получить дополнительную информацию о безопасности и защите кода.

Полезные советы по быстрой отладке Java-кода

Источник: Hackernoon Помимо написания эффективного кода, прокачка себя в его отладке — одно из самых полезных действий для облегчения жизни Java-разработчика. Особенно это важно в современных условиях разработки софта, где мир программного обеспечения активно переходит к распределенным архитектурам и асинхронному коду.Кофе-брейк #35. Как соблюдать правила безопасности на GitHub. Полезные советы по быстрой отладке Java-кода - 2Хотя программные ошибки неизбежны, обнаруживать и исправлять их в сложных сборках становится все труднее. А при переходе к этапу выпуска продукта процесс отладки становится еще более серьезной проблемой. К сожалению, нет никакого способа избежать этого — отладка необходима. Чтобы помочь, вам я решил поделиться несколькими полезными советами по отладке Java-приложений на разных этапах разработки.

Используйте контрольные точки

Давайте начнем с контрольных точек — очевидного, но очень важного момента, который лежит в основе любого процесса отладки. Контрольные точки позволяют остановить выполнение приложения, чтобы вы могли проанализировать состояние программы и выяснить, почему код работает неправильно. Каждый отладчик предлагает несколько вариантов контрольных точек, включая условные точки, точки остановки исключений, точки наблюдения и точки трассировки. Изучение того, как и когда применять различные типы контрольных точек, позволяет сделать процесс отладки более плавным. Стоит упомянуть, что некоторые современные инструменты поддерживают контрольные точки без прерывания работы приложения. Это дает возможность устанавливать точки в вашем коде и собирать данные отладки, не останавливая выполнение программы.

Показывайте логическую структуру

Функция «показать логическую структуру» (show logical structure) весьма полезна при мониторинге содержимого в классах Java. Если эта функция включена, список переменных показывает массив, который гораздо более полезен в контексте отладки. Это очень удобно, особенно если в вашем коде отсутствуют методы toString () для объектов. Представление переменных также позволяет вам напрямую изменять значения ваших переменных во время отладки. Это может сэкономить значительное количество времени, поскольку не придется перезапускать сеанс отладки с измененными входящими данными.

Научитесь навигации по кодовой базе

Любой отладчик Java может использовать несколько функций, которые позволяют во время отладки перемещаться по различным разделам кода. Некоторые из них включают в себя «run to line», «step over», «step into» и «step into». В дополнение к ним рассмотрите возможности еще двух:
  1. Drop to frame — эта функция используется для возврата к точке в вашем фрейме стека. Если вы пропустили какую-то точку и вам нужно вернуться назад, просто используйте функцию Drop to frame.
  2. Пошаговая фильтрация (Step filtering) — позволяют пропускать определенные пакеты во время отладки. Вам не нужно перемещаться по всем классам системы JDK, когда вы можете просто отфильтровать типы, которые вам не нужны.
Чтобы повысить скорость навигации по коду, вам нужно освоить сочетания функциональных клавиш:
  • F5 — для «stepping into».
  • F6 — для «stepping over».
  • F7 — для «step return».
  • F8 — для запуска до следующей контрольной точки.
Хотя горячие клавиши могут отличаться в разных IDE, если вы их запомните, то это избавит вас от необходимости более частого использования мыши.

Научитесь избегать взаимную блокировку (Deadlocks)

Сценарий взаимной блокировки возникает, когда два или более потоков блокируются после формирования циклической зависимости. Поскольку набор потоков Java обычно ожидает другого ресурса, это может привести к полной остановке приложения. Отладка взаимоблокировок jstack может быть довольно сложной, поскольку они не проявляют таких индикаторов проблем, как резкий скачок памяти, нагрузка процессора и т.д. Существуют различные подходы к устранению неполадок в ситуации взаимоблокировки jstack. Во-первых, вы можете захватить несколько дампов потоков в вашем кластере JVM, чтобы вывести шаблоны потоков. В этом случае анализа статического дампа потока может быть недостаточно. В зависимости от размера кластера JVM может потребоваться захват тралом нескольких файлов, что часто бывает трудоемким и длительным процессом. Лучше всего использовать решение для мониторинга приложений, которое обеспечивает уровень JV и уровень кода, необходимые для изоляции потоков взаимоблокировок. К счастью, существуют инновационные инструменты, способные помочь в этой ситуации, включая некоторые современные отладчики, а также коммерческие APM-инструменты. Эти инструменты повышают прозрачность вашего Java-кода в процессе выявления ошибок.

Используйте возможности производственных отладчиков

Типичный процесс отладки, которому обычно следует большинство разработчиков, включает в себя репликацию среды, изоляцию ошибки, а затем исправление. Однако это применимо не для всех случаев. Если возникла именно такая ситуация, разработчику следует использовать мощные производственные отладчики. Rookout — один из таких инструментов. Он позволяет собирать отладочные данные из приложений без изменения его состояния или управления потоком. С Rookout вы можете устанавливать неразрывные контрольные точки для получения полной трассировки стека, перехвата действующих переменных или любых других данных приложения, необходимых для отладки. Таким образом, вместо использования решений по мониторингу с высокой перегрузкой для производственной отладки, просто используйте Rookout, который предоставляет всё необходимое для отладки приложений без повторного развертывания или написания нового кода. Работаете ли вы над серверными или контейнерными приложениями, Rookout станет отличным дополнением к вашему отладочному арсеналу.

Не забывайте об удаленной отладке

Подавляющее большинство IDE, таких как NetBeans, Eclipse, IntelliJ IDEA и Visual Studio, поддерживают удаленную отладку — метод, который позволяет исправлять код Java, находящийся на другом компьютере. Это особенно важно в ситуациях, когда ваша система не поддерживает локальную отладку, или когда на компьютере недостаточно ресурсов для запуска отладчиков. Чтобы выполнить удаленную отладку, вы должны предоставить сведения о конфигурации, которые отладчик будет использовать для подключения к удаленному порту. Удаленная отладка также полезна при устранении ошибок в условиях, когда разработчикам, находящимся вне офиса, необходимо подключиться к приложению для исправления ошибки. Помните, что иногда отладка может занимать больше времени, чем фактическая реализация. Поскольку вы оттачиваете свои навыки отладки Java, всегда стремитесь писать чистый, эффективный код — это окупается, когда дело доходит до исправления багов. Если вам кажется, что ситуация выходит из-под контроля, всегда стоит сделать перерыв. Ошибка — это головоломка для программирования, и многие программисты сумели решить эту проблему, не находясь рядом со своим компьютером. Используйте стратегии, описанные выше, чтобы избавиться от проблем с отладкой Java. Удачного кодинга!