我想揭露一個我找不到解決方案的問題,雖然我在網上多次被告知,但我找到的資源并不能滿足我的好奇心。
問題如下:
假設我們在以下端點的節點 js(express)中有一個 rest API -> /stars。假設我們想將這個帶有端點/星級的 API 出售給某個目標客戶,因此端點將只允許購買 API 的客戶使用它。問題是自發出現的,假設比薩公司購買了我的 API,我為他們生成了一個訪問令牌,然后他們會用他們的令牌呼叫我的端點以獲取資源,到目前為止非常好。但是,所有請求都很容易看到。
示例 Chrome> 開發工具> 網路,我不僅可以看到具有完整地址的端點,還可以看到傳遞的有效負載!
因此,作為攻擊者,我可以很好地(無需支付 API 費用)使用帶有令牌的端點/星星來捕捉比薩行業,復制所有內容并通過提供相同的令牌和相同的端點將其貼在我的服務上。我已經知道像 jwt 這樣的令牌的存在,但無論如何它們都不能解決問題,因為不同的令牌只有過期時間。即使它在 15 分鐘或 3 分鐘后過期,只需檢索另一個并使用相同的令牌提供相同的請求,有人能指導我找到解決方案嗎?
我見過的唯一一個找到解決方案的方法是 Instagram 發送數千行的有效負載,這真的是唯一的方法嗎?
注意:它甚至不是公開的。
uj5u.com熱心網友回復:
@xVoid
首先,您可以借助node.js中的加密模塊為您的回應資料設定加密/解密模塊,在這里您發送加密的回應,您的 API 客戶端解密您的回應并使用它。
您可以為您的 API 設定一個密鑰,這意味著每次您的客戶或用戶向您發送請求時,他們都必須在正文中發送該密鑰,而不是標題,這樣其他人就無法獲取您的資料,因為他們沒有該密鑰,并且在 express 中,您可以設定中間件來驗證此密鑰是否存在,如果不簡單地回傳“您未被授權”
如果你沒有得到任何觀點或者你想深入研究特定的事情,請告訴我
uj5u.com熱心網友回復:
您可以簡單地使用 http-only cookie 并在 cookie 中發送令牌,而不是普通的標頭
uj5u.com熱心網友回復:
使用您的端點的客戶不應與最終用戶共享他們的 API 密鑰。
這意味著任何使用您服務的客戶都應至少為您的特定端點創建一個代理服務器。
CLIENT GET /pizza FROM CUSTOMER -> CUSTOMER GET /pizza?apiToken=<...> FROM SERVICE
顯然,在 CUSTOMER 和您的 SERVICE 之間可能存在中間人攻擊,但使用 SSL 不太可能發生這種情況(相關:HTTPS (HTTP SSL) 中的查詢字串引數是否安全?)
如果客戶懷疑他們的 api 密鑰被泄露,他們應該撤銷它并向您的 SERVICE 請求一個新的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381660.html
上一篇:Gradle依賴(org.apache.commons)是否也受當前log4j漏洞的影響?
下一篇:如何將串列切成不同長度的子串列
