Рекомендации по безопасному предоставлению учетных данных пользователя другим внутренним службам (ключ API)? - PullRequest
0 голосов
/ 28 января 2019

У меня есть приложение Ruby on Rails с базой данных, в которой хранится конфиденциальная информация о пользователях (хешируется с помощью Devise).Теперь мне нужно передать часть этой конфиденциальной информации другой внутренней службе на другом сервере, который нуждается в ней для выполнения вызовов сторонних API, поэтому ему нужен способ запрашивать эту информацию из приложения RoR.

Какой лучший подход к чему-то подобному?Моей первой интуицией было предоставление внутреннего ключа API, который предоставил бы доступ ко всей конфиденциальной информации в БД (через частную конечную точку), так же, как ключи разработчика предоставляют доступ к подмножеству конечных точек API.Это достаточно безопасно, пока я хеширую ключ API?Каков наилучший подход к передаче конфиденциальной информации через внутренние службы?

1 Ответ

0 голосов
/ 04 февраля 2019

Частные API

Моей первой интуицией было предоставление внутреннего ключа API, который предоставил бы доступ ко всей конфиденциальной информации в БД (через частную конечную точку), так же, как ключи разработчика предоставляют доступ кподмножество конечных точек API

Ну, частные конечные точки или частные API не существуют в смысле защиты их только с помощью ключа API.Из веб-приложения вам нужно только увидеть исходный код HTML, чтобы найти ключи API.На мобильных устройствах вы можете увидеть, как просто перепроектировать ключи API в этой серии статей о технологиях безопасности Mobile API.Хотя статьи относятся к мобильным устройствам, некоторые из используемых методов также применимы в API других типов.Я надеюсь, что теперь вы можете увидеть, как кто-то может получить ключ API и злоупотребить им с помощью API, который вы пытаетесь защитить.

Теперь, даже если вы не предоставите ключ API в мобильном приложении или веб-приложении,API все еще доступен для обнаружения, особенно если конечная точка обслуживается тем же API, который используется для других общедоступных конечных точек.Это становится еще проще, если в robots.txt указать, что боты не должны получать доступ к некоторым конечным точкам, потому что это первое место, где хакеры обращают внимание на попытки перечислить векторы атак в ваших API.

Возможные решения

Private API Solution

Какой лучший подход к подобному?Моей первой интуицией было предоставление внутреннего ключа API, который предоставил бы доступ ко всей конфиденциальной информации в БД (через частную конечную точку)

Чтобы иметь частный API, сервер, на котором он размещен, должен бытьзащищен брандмауэром и заблокирован на другом внутреннем сервере, использующем его для закрепления сертификата и, возможно, также по IP-адресу.Чтобы иметь возможность надлежащим образом защитить и заблокировать внутренний сервер, на котором размещен предполагаемый частный API, он НЕ ДОЛЖЕН поддерживать какие-либо публичные запросы.

Закрепление сертификата :

Прикрепление эффективно удаляет «конференцию доверия».Прикладная программа, которая прикрепляет сертификат или открытый ключ, больше не должна зависеть от других - таких как DNS или CA - при принятии решений о безопасности, относящихся к личности партнера.Для тех, кто знаком с SSH, вы должны понимать, что закрепление открытого ключа почти идентично опции SSH StrictHostKeyChecking.SSH все время делал это правильно, и весь остальной мир начинает осознавать достоинства прямой идентификации хоста или службы по их открытому ключу.

Решение для прямого доступа к базе данных

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

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

Заключение

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

Любой, кому необходим доступ к этим конфиденциальным данным, ДОЛЖЕН иметь права на чтение только для этой конкретной таблицы базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...