簡體   English   中英

防止不受信任的客戶端使用 REST API 的登錄/注冊端點

[英]Prevent untrusted clients to use login/register endpoints of REST API

I have actually one SPA in ReactJs + one mobile application in Flutter + one REST API developed with SailsJs running on a separate server. 當我們使用有效信息(ID/密碼)登錄時,我使用由 API 發回的安全 session cookie 管理用戶身份驗證。

因此,所有需要對用戶進行身份驗證的端點都受到保護(除非還有其他我不知道的安全最佳實踐?)。 每次調用受保護的端點之一都會檢查 session cookie 的過期和有效性。

我真的閱讀了大量關於保護 REST API 的主題和博客文章。 我的問題從來沒有或幾乎沒有出現過。 所以現在我的主要問題是:

如何限制我的公共 API 端點(當前登錄和注冊)不需要用戶進行身份驗證(因為有用於實現此任務的端點......)僅用於我受信任的客戶端應用程序(Web 和移動)?

如何防止其他人開發的另一個應用程序使用這些端點?

我不希望任何人通過我的 API 登錄,除非在我正在開發的客戶端應用程序中完成... ..

我看到很多使用登錄 API 路由(例如 Heroku)的流行服務無法在 Postman 中使用相同的參數(403 錯誤代碼)訪問。 所以這是可能的。 但是他們是怎么做到的呢? 在專門的論壇中沒有任何東西可以處理這個問題,或者我錯過了一些東西!

我很難使用存儲在客戶端中的秘密令牌來對其進行身份驗證,但它實際上是公開的,例如 web 開發人員工具。

需要一些建議。

謝謝

用戶身份驗證不是應用身份驗證

因此,所有需要用戶進行身份驗證的端點都受到保護......

此端點僅受保護以識別、驗證和授權請求中的,而不是針對正在執行請求的內容,是一個在開發人員中不太了解的主題,無論他們是初級還是高級。

WHO和WHAT訪問API服務器的區別

在我寫的一篇文章中,題為為什么您的移動應用程序需要 Api 密鑰? 您可以更詳細地閱讀什么在訪問您的 API 服務器之間的區別,我從中引用以下內容:

向 API 服務器發出請求的原因是什么 它真的是您的移動應用程序的真實實例,還是機器人、自動腳本或攻擊者使用 Postman 之類的工具手動在您的 API 服務器周圍探查?

是移動應用程序的用戶,我們可以通過多種方式進行身份驗證、授權和識別,例如使用 OpenID Connect 或 OAUTH2 流。

因此,是您的 API 服務器的用戶,您將能夠驗證和授權對數據的訪問,以及代表用戶發出請求的軟件是什么,您的正版應用程序,被篡改的應用程序,自動腳本或者有人通過 cURL、Postman 或類似工具手動使用您的 API。

到目前為止,我希望您有足夠的知識來理解為什么 user( who ) 身份驗證與 app( what ) 身份驗證不同。

將 API 服務器鎖定到應用程序

如何限制我的公共 API 端點(當前登錄和注冊)不需要用戶進行身份驗證(因為有用於實現此任務的端點......)僅用於我受信任的客戶端應用程序(Web 和移動)?

我認為,到目前為止,您可能已經清楚,不僅登錄和注冊端點需要保護免受請求的影響。

如何防止其他人開發的另一個應用程序使用這些端點? 我不希望任何人通過我的 API 登錄,除非在我正在開發的客戶端應用程序中完成... ..

這對於 web 應用程序來說是非常難以實現的,但在實施移動應用程序證明概念時,對於移動應用程序來說,這是可能的。

對於 web 應用程序

由於 web 的構建方式的性質,檢查 web 應用程序所需要的只是按 F12 或檢查頁面源,然后搜索從另一個工具服務器訪問 ZDB974238714CA8DE634A7CE1D08 所需的任何內容。

您可以學習一些有用的技術來幫助您的 API 服務器嘗試僅響應來自期望的請求,您的正版 web 應用程序,為此我邀請您閱讀來自呼叫的安全 Z8A5DA52ED126447D359E70C0A8A 數據的問題的回答該應用程序,特別是專門用於保護 API 服務器的部分。

對於移動應用

要了解如何將 API 服務器鎖定到您的移動應用程序,我建議您閱讀如何保護移動應用程序的 API REST 問題的回答? 有關保護 API 服務器可能更好的解決方案的部分。

要保護的端點

因此,所有需要對用戶進行身份驗證的端點都受到保護(除非還有其他我不知道的安全最佳實踐?)。

如果您只想增強登錄和注冊端點的安全性,這取決於您,但我的建議是增強所有這些端點的安全性,以檢測訪問它們的內容。

POSTMAN 與 HEROKU 等

我看到很多使用登錄 API 路由(例如 Heroku)的流行服務無法在 Postman 中使用相同的參數(403 錯誤代碼)訪問。 所以這是可能的。 但是他們是怎么做到的呢? 在專門的論壇中沒有任何東西可以處理這個問題,或者我錯過了一些東西!

I never used Heroku, but when I am using an API that doesn't work in Postman, but works in other clients, let's say from cURL, then I disable Postman from sending it's own user-agent and normally the API will start accepting the要求。

如果沒有,那么他們可能正在做設備指紋識別

設備指紋或機器指紋是為識別目的而收集的有關遠程計算設備的軟件和硬件的信息。 通常使用指紋算法將信息同化為簡短的標識符。 瀏覽器指紋是通過與設備的web瀏覽器交互而專門收集的信息。

指紋可以在主動或被動模式下完成。 在主動模式下,一些 Javascript 在客戶端上運行以收集一些數據以發送回 API 服務器,而在被動模式下,它使用服務器中請求的可用信息,例如 Z80791B3AE7002CB88C246876D9FAA8F 標頭和請求參數。

雖然提高了偽造請求的標准,但可以通過觀察受信任的客戶端如何發送請求並模仿它來繞過它。 對於攻擊者來說,枚舉所有變體然后自動化它們只是多一點工作。

您想要額外的里程嗎?

我真的閱讀了大量關於保護 REST API 的主題和博客文章。

首先,我祝賀您付出了如此多的努力來教育自己保護您的 API。

我不知道您是否已經閱讀了我將要鏈接的一些 OWASP 資源,但是在任何對安全問題的回答中,我總是喜歡參考 OWASP 基金會的出色工作;)

對於 Web 應用程序

OWASP Web 十大風險

OWASP Top 10 是一個強大的 web 應用程序安全意識文檔。 它代表了對 web 應用程序最關鍵的安全風險的廣泛共識。 項目成員包括來自世界各地的各種安全專家,他們分享了他們的專業知識來制作此列表。

Web 安全測試指南

OWASP Web 安全測試指南包括用戶可以在自己的組織中實施的“最佳實踐”滲透測試框架和描述測試最常見 web 應用程序和 Z2567A5EC973E07AC2DZZ98408 服務安全問題的技術的“低級”滲透測試指南。

對於移動應用

OWASP 移動安全項目 - 十大風險

OWASP 移動安全項目是一個集中資源,旨在為開發人員和安全團隊提供構建和維護安全移動應用程序所需的資源。 通過該項目,我們的目標是對移動安全風險進行分類並提供開發控制以減少其影響或被利用的可能性。

OWASP - 移動安全測試指南

移動安全測試指南 (MSTG) 是移動應用安全開發、測試和逆向工程的綜合手冊。

對於 APIS

OWASP API 安全前 10 名

OWASP API 安全項目旨在通過強調不安全 API 的潛在風險並說明如何減輕這些風險,為軟件開發人員和安全評估人員提供價值。 為了促進實現這一目標,OWASP API 安全項目將創建和維護前 10 名 API 安全風險文檔,以及創建或評估 API 時的最佳實踐文檔門戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM