Как проверить запросы, отправленные из одного приложения Rails в другое - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть 2 приложения rails.

App1 необходимо отправить данные, которые будут сохранены App2.

Я хочу знать, как лучше создать безопасную конечную точку APIчтобы сделать это.

Как я могу аутентифицировать запросы App1 отправляет на App2

Я работал с другими API, которые требуют проверки запросов, такими как Facebook.

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

def verify_webhook(request)

    sha1 = request.headers["X-Hub-Signature"].gsub("sha1=", "")
    digest = OpenSSL::Digest.new('sha1')
    request.body.rewind
    data = request.body.read

    # Calculate a sha1 with the app key and payload from the post request
    calculated_hmac = OpenSSL::HMAC.hexdigest(digest, ENV['FB_APP_SECRET'], data)

    # Computate hmac and see if verified is true
    verified = ActiveSupport::SecurityUtils.secure_compare(calculated_hmac, sha1)

    verified
end

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

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

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

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

Для сред с низкой угрозой предварительный общий ключ / секрет передается вHTTP-заголовка, упомянутого в комментарии @ max, будет достаточно: вы просто предоставляете ключ обоим приложениям и отправляете его в HTTP-заголовке при каждом вызове, что, разумеется, должно осуществляться через соединение с шифрованием TLS.

Если ваша модель угроз включает в себя злоумышленника, который может разорвать это зашифрованное TLS-соединение и оттуда извлечь секретный секрет, то вы можете взять его на ступеньку выше и вместо передачи самого ключа в заголовке создайте контрольную суммучерез HMAC и сравните его на клиенте - как в вашем примере с SDK Facebook.Возможно, вы также захотите добавить криптографический одноразовый номер, чтобы избежать повторной атаки.

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

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