GitHub App Используйте вместо него
Если это возможно, попробуйте использовать GitHub App вместо OAuth appнего. В общем случае предпочтительнее GitHub AppsOAuth apps. GitHub Apps используйте подробные разрешения, предоставьте пользователю больше контроля над тем, к каким репозиториям приложение может получить доступ, и использовать короткие маркеры. Эти свойства могут затвердить безопасность вашего приложения, ограничив ущерб, который можно сделать, если учетные данные вашего приложения просочились.
OAuth appsАналогично, GitHub Apps можно по-прежнему использовать OAuth 2.0 и создавать тип маркера OAuth (называемый маркером доступа пользователя) и выполнять действия от имени пользователя. Однако также GitHub Apps может действовать независимо от пользователя.
Дополнительные сведения см. в GitHub Appsразделе О создании приложений GitHub.
Дополнительные сведения о переносе существующего OAuth app в a GitHub Appсм. в разделе Миграция OAuth приложений на GitHub Apps.
Использование минимальных областей
Необходимо OAuth app запросить только области, необходимые приложению для выполнения своих предполагаемых функций. Если какие-либо маркеры для приложения скомпрометируются, это приведет к ограничению объема ущерба, который может произойти. Дополнительные сведения см. в разделе Авторизация приложений OAuth.
Авторизовать тщательно и надежно
После входа в систему разработчики приложений должны выполнить дополнительные действия, чтобы убедиться, что пользователь должен иметь доступ к данным в вашей системе. Для каждого входа требуются новые проверки членства, доступа и текущего состояния единого входа.
Использование устойчивого, уникального id для хранения пользователя
Когда пользователь входит и выполняет действия в приложении, необходимо помнить, какой пользователь принял это действие, чтобы предоставить им доступ к тем же ресурсам при следующем входе.
Для правильного хранения пользователей в базе данных всегда используйте id пользователя. Это значение никогда не изменится для пользователя или будет использоваться для указания другого пользователя, поэтому он гарантирует, что вы предоставляете доступ к пользователю, который вы намерены. Вы можете найти пользователя id с конечной GET /user точкой REST API. См . раздел AUTOTITLE.
Если вы храните ссылки на репозитории, организации и предприятия, используйте их id , чтобы убедиться, что ссылки на них остаются точными.
Никогда не используйте идентификаторы, которые могут изменяться с течением времени, включая дескриптор пользователей, слизки организации или адреса электронной почты.
Проверка доступа организации для каждой новой проверки подлинности
При входе пользователя следует отслеживать, для каких организаций разрешен маркер пользователя. Это может измениться с течением времени после входа, так как пользователи удаляются из организаций. Если организация использует единый вход SAML и пользователь не выполнил единый вход SAML, маркер доступа пользователя не будет иметь доступа к этой организации. Следует регулярно использовать конечную точку GET /user/installations REST API, чтобы проверить, к каким организациям имеется доступ маркера доступа пользователей. Если пользователь не авторизован для доступа к организации, следует запретить доступ к данным организации в собственном приложении, пока они не будут выполнять единый вход SAML или повторно присоединиться к организации. Дополнительные сведения см. в разделе Конечные точки REST API для GitHub App установок.
Хранение пользовательских данных с помощью контекстов организации и предприятия
Помимо отслеживания удостоверения пользователя с помощью id поля, необходимо сохранить данные для организации или предприятия, в которых работает каждый пользователь. Это поможет убедиться, что вы не утечете конфиденциальную информацию, если пользователь переключает роли.
Например:
- Пользователь находится в
Monaорганизации, для которой требуется единый вход SAML и вход в приложение после выполнения единого входа. Теперь ваше приложение имеет доступ к тому, что пользователь делает внутриMona. - Пользователь извлекает кучу кода из репозитория
Monaи сохраняет его в приложении для анализа. - Позже пользователь переключает задания и удаляется из
Monaорганизации.
Когда пользователь обращается к приложению, он по-прежнему видит код и анализ из Mona организации в учетной записи пользователя?
Поэтому важно отслеживать источник данных, сохраняемых приложением. В противном случае приложение является угрозой защиты данных для организаций, и они, скорее всего, запретят ваше приложение, если они не могут доверять, что ваше приложение правильно защищает свои данные.
Проверка доступа пользователя к приложению
приложение OAuth может получить доступ к пользователям за пределами организации или предприятия. Если вы планируете использовать приложение только участниками вашей организации или предприятия, необходимо проверить состояние членства пользователя при входе пользователя в приложение.
Чтобы найти список организаций, в которые входит пользователь, можно использовать конечную точку "Список организаций для прошедших проверку подлинности пользователей". Затем вы можете проверить этот список в списке утвержденных организаций для вашего приложения. Дополнительные сведения см. в разделе Конечные точки REST API для организаций.
Защита учетных данных приложения
С помощью секрета клиента приложение может авторизовать пользователя и создать маркеры доступа пользователей. Эти маркеры можно использовать для выполнения запросов API от имени пользователя.
Необходимо безопасно хранить секрет клиента приложения и все созданные маркеры. Механизм хранения и его относительная безопасность зависят от архитектуры интеграции и платформы, на которой она работает. Как правило, следует использовать механизм хранения, предназначенный для хранения конфиденциальных данных на используемой платформе.
Секреты клиента
Секреты клиента необходимы для создания маркеров доступа пользователей для приложения, если приложение не использует поток устройства. Дополнительные сведения см. в разделе Авторизация приложений OAuth.
Если ваше приложение является конфиденциальным клиентом, то есть оно может безопасно хранить его в секрете, рассмотрите возможность хранения клиента в хранилище ключей, например, Azure Key Vault, или в виде зашифрованной переменной среды или секрета на вашем сервере.
Если ваше приложение является общедоступным клиентом (собственное приложение, которое выполняется на устройстве пользователя, служебной программе CLI или веб-приложении с одной страницей), вы не можете защитить секрет клиента. Необходимо отправить секрет клиента в коде приложения и использовать PKCE для повышения безопасности потока проверки подлинности. Если вы планируете использовать доступ к собственным службам на основе маркеров, созданных приложением, следует будьте осторожны, так как общедоступные клиенты являются тривиально спуфингными. Любой пользователь может повторно использовать идентификатор клиента вашего приложения для входа.
Не включать поток устройств без причины
Рекомендуется использовать код авторизации с PKCE через поток устройств, если вы обеспокоены использованием секрета клиента в общедоступном клиенте. Поток устройств не требует URI перенаправления вообще, что означает, что злоумышленник может использовать поток устройства для удаленного олицетворения приложения в рамках фишинговой атаки. По этой причине не включите поток устройств для приложения, если вы не используете приложение в ограниченной среде (CLIs, устройства Интернета вещей или системы без головы).
Маркеры доступа пользователей
Если приложение является веб-сайтом или веб-приложением, необходимо зашифровать маркеры на серверной части и обеспечить безопасность в системах, которые могут получить доступ к маркерам. Рассмотрите возможность хранения маркеров обновления в отдельном месте от активных маркеров доступа.
Если приложение является собственным клиентом, клиентским приложением или работает на пользовательском устройстве (а не на серверах), возможно, вы не сможете защитить маркеры, а также приложение, которое выполняется на серверах. Маркеры следует хранить с помощью механизма, рекомендуемого для платформы вашего приложения, и помните, что механизм хранения может быть не полностью безопасным.
Использование соответствующего типа токена
OAuth apps может создавать маркеры доступа пользователей для выполнения запросов API, прошедших проверку подлинности. Ваше приложение никогда не должно использовать personal access token пароль для GitHub проверки подлинности.
Создание плана по обработке нарушений безопасности
У вас должен быть план, чтобы вы могли своевременно обрабатывать любые нарушения безопасности.
Если секрет клиента вашего приложения скомпрометирован, вам потребуется создать новый секрет, обновить приложение, чтобы использовать новый секрет и удалить старый секрет.
В случае компрометации маркеров доступа пользователей следует немедленно отозвать эти маркеры. Дополнительные сведения см. в разделе Конечные точки REST API для авторизации OAuth.
Выполнение регулярных проверок уязвимостей
Следует проводить регулярные проверки уязвимостей для приложения. Например, можно настроить сканирование кода и проверку секретов для репозитория, на котором размещен код приложения. Дополнительные сведения см. в разделе [AUTOTITLE и Code scanning](/code-security/concepts/secret-security/secret-scanning).
Выбор подходящей среды
Если приложение работает на сервере, убедитесь, что среда сервера безопасна и может обрабатывать объем ожидаемого трафика для приложения.
Безопасное использование служб
Если приложение использует сторонние службы, они должны использоваться в безопасном режиме:
- Все службы, используемые приложением, должны иметь уникальный вход и пароль.
- Приложения не должны совместно использовать учетные записи служб, такие как электронная почта или службы баз данных, для управления службой SaaS.
- Только сотрудники с административными обязанностями должны иметь доступ администратора к инфраструктуре, в которую размещается ваше приложение.
Добавление ведения журнала и мониторинга
Рассмотрите возможность добавления возможностей ведения журнала и мониторинга для приложения. Журнал безопасности может включать:
- события аутентификации и авторизации;
- изменения конфигурации службы;
- операции чтения и записи объектов;
- Изменения разрешений пользователей и групп
- повышение прав роли до администратора;
Журналы должны использовать согласованную метку времени для каждого события и записывать пользователей, IP-адреса или имена узлов для всех зарегистрированных событий.
Включение удаления данных
Если ваше приложение доступно другим пользователям, необходимо предоставить пользователям способ удаления своих данных. Чтобы удалить данные, пользователи не должны отправлять сообщения электронной почты или обращаться в службу поддержки.