[英]Secure rest api node js
我想公開一個我找不到解決方案的問題,雖然我已經多次在 web 上被告知,但我找到的資源並不能滿足我的好奇心。
假設我們在節點 js (express) 中有一個 rest API 在以下端點 -> / stars。 假設我們想將這個帶有端點/星號的 API 出售給某個目標客戶,那么端點將因此只允許購買 API 的客戶使用它。 問題是自發出現的,假設披薩公司購買了我的 API 並且我為他們生成了訪問令牌,然后他們會用他們的令牌調用我的端點以獲得資源,到目前為止非常好。 但是,所有請求都很容易看到。
示例 Chrome> 開發工具> 網絡,我不僅看到了具有完整地址的端點,甚至還看到了傳遞的有效負載!
因此,作為攻擊者,我可以很好地(無需支付 API)使用帶有令牌的端點/星號來捕捉披薩行業,復制所有內容並通過提供相同的令牌和相同的端點將其放在我的服務上。 我已經知道像 jwt 這樣的令牌的存在,但它們無論如何都不能解決問題,因為不同的令牌只有過期。 即使它在 15 分鍾或 3 分鍾后過期,只需檢索另一個並提供具有相同令牌的相同請求,誰能指導我找到解決方案?
我見過的唯一能找到解決方案的是 Instagram,它發送了數千行有效負載,這真的是唯一的方法嗎?
注意:它甚至不公開。
首先,您可以借助 node.js 中的加密模塊為您的響應數據設置一個加密/解密模塊,在這里您發送加密響應,您的 API 客戶端解密您的響應並使用它。
您可以為您的 API 設置一個密鑰,這意味着每次您的客戶或用戶向您發送請求時,他們必須在正文中發送該密鑰,而不是 header 以便其他人無法獲取您的數據,因為他們沒有那個密鑰,並且在快遞中你可以設置中間件來驗證這個密鑰是否存在,如果不是簡單地返回“你沒有被授權”
如果您沒有任何意義,或者您想深入了解特定的事情,請告訴我
您可以簡單地使用 http-only cookie 並在 cookie 中發送令牌,而不是普通的 header
使用您的端點的客戶不應與最終用戶共享其 API 密鑰。
這意味着任何使用您的服務的客戶都應該至少為您的特定端點創建一個代理服務器。
CLIENT GET /pizza FROM COSTUMER -> COSTUMER GET /pizza?apiToken=<...> FROM SERVICE
顯然,在 COSTUMER 和您的 SERVICE 之間可能存在中間人攻擊,但使用 SSL 不太可能發生這種情況(相關: HTTPS (HTTP + SSL) 中的查詢字符串參數是否安全? )
如果 COSTUMER 懷疑他們的 api 密鑰被泄露,他們應該撤銷它並向您的 SERVICE 請求一個新密鑰。
當然,但如果我有一個 API 顯示足球信息(僅限登錄用戶),那么登錄就足夠了,即使有驗證碼,拿 cookies 並將它們粘貼到 Z23EEEB4347BDD725DFC6B7EE9A3B 上where the API returns mine football data and have them available everywhere, it is true that the jwt expires, it is true that the sessions in php expire, it is true that the cookies are protected, but if I have the endpoint / getInfoFootBall accessible by通過 cookies ^ + 我的 API 訪問令牌
(我的可能只是一種無用的偏執狂,但實際上我描述的系統有效)
我寫在這里是因為評論太長了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.