簡體   English   中英

安全 rest api 節點 js

[英]Secure rest api node js

我想公開一個我找不到解決方案的問題,雖然我已經多次在 web 上被告知,但我找到的資源並不能滿足我的好奇心。

問題如下:

假設我們在節點 js (express) 中有一個 rest API 在以下端點 -> / stars。 假設我們想將這個帶有端點/星號的 API 出售給某個目標客戶,那么端點將因此只允許購買 API 的客戶使用它。 問題是自發出現的,假設披薩公司購買了我的 API 並且我為他們生成了訪問令牌,然后他們會用他們的令牌調用我的端點以獲得資源,到目前為止非常好。 但是,所有請求都很容易看到。

示例 Chrome> 開發工具> 網絡,我不僅看到了具有完整地址的端點,甚至還看到了傳遞的有效負載!

因此,作為攻擊者,我可以很好地(無需支付 API)使用帶有令牌的端點/星號來捕捉披薩行業,復制所有內容並通過提供相同的令牌和相同的端點將其放在我的服務上。 我已經知道像 jwt 這樣的令牌的存在,但它們無論如何都不能解決問題,因為不同的令牌只有過期。 即使它在 15 分鍾或 3 分鍾后過期,只需檢索另一個並提供具有相同令牌的相同請求,誰能指導我找到解決方案?

我見過的唯一能找到解決方案的是 Instagram,它發送了數千行有效負載,這真的是唯一的方法嗎?

注意:它甚至不公開。

@xVoid

  1. 首先,您可以借助 node.js 中的加密模塊為您的響應數據設置一個加密/解密模塊,在這里您發送加密響應,您的 API 客戶端解密您的響應並使用它。

  2. 您可以為您的 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 訪問令牌

  1. 我的 API 訪問令牌肯定會在請求中公開。
  2. I can safely generate cookies by first logging in manually and then setting them on my python bot and putting them in the https request data result: I had access to the API even if for a few minutes (But I did...) - NB :在登錄時添加驗證碼只能在最低限度內解決問題,因為如果我在網站上手動登錄並在 python 機器人上插入我的 cookies,但是我會有一個成功的請求,我非常清楚這樣的私人信息因為用戶的電話號碼或密碼始終受到保護,因為用戶永遠看不到端點(因為大多數時候它是從管理面板調用的,所以除非管理員想要違反自己,否則它沒有意義),但是我仍然可以訪問甚至可能已售出 15 分鍾的資源這一事實會造成不適,如果令牌不是公開的,肯定會有一個文件在某個點開始請求,其中可能使用 axios 將向 API 服務器發出請求,即使在這里我們有一個問題,也許 Z38C3787939C7B2B6C77DZ 請求將不可見,因為它完成了它8891從那里到服務器的域(我說 axios 舉個例子),但是調用使用服務器端 axios 調用文件的端點就足夠了......無論如何都沒有辦法告訴 ZDB9742387083CA8DE6FZACE www.siteofbuyer.net然后接受請求,否則丟棄它?

(我的可能只是一種無用的偏執狂,但實際上我描述的系統有效)

我寫在這里是因為評論太長了

暫無
暫無

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

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