我可能對后端服務器的作業方式有點困惑。假設我有一個帶有登錄名的前端 React 應用程式。登錄資訊存盤在資料庫(即 MSSQL、MySQL、MongoDB)中,我有一個節點后端,其中包含我的應用程式在用戶登錄或執行任何操作時獲取該資訊的路由。當我的 React 應用程式和服務器都被托管時,我會呼叫 api 并且不會將機密資訊(例如密碼)發送回客戶端(如果登錄資訊在后端)。我的問題是,是什么阻止了某人找到后端路由并將其放入 Insomnia 以獲取密碼或其他敏感資訊?
我的第一個想法是在后端使用 express-session 和 auth 來要求用戶登錄帳戶才能發出此類請求,但我認為這有兩個問題:
- 當多個用戶同時登錄時,這將如何作業?由于用戶在技術上并沒有親自訪問 api 路由,因此 session 是否仍然知道誰在登錄前端的哪個帳戶?即使第一個尚未注銷,第二個登錄的人是否會覆寫第一個人的會話?
- 如果身份驗證在某人登錄之前沒有啟動,那么是否有人能夠從登錄路由本身獲取回應密碼資料?
對不起,如果這個問題聽起來很愚蠢,我只是在理解安全方面有點困難。
uj5u.com熱心網友回復:
聽起來好像對身份驗證會話的作業方式有些誤解。會話有兩種主要作業方式 - 將會話存盤在后端(舊方式),或將會話資料存盤在 cookie 中,通常是 JWT(JSON Web 令牌)。Cookie 是從服務器傳遞到瀏覽器的資料,只要瀏覽器向您的服務器發出后續請求,它也會將 cookie 傳回,因此您的服務器將始終能夠獲取該資料。這適用于身份驗證的方式如下:
- 用戶使用憑據(用戶名和密碼)登錄您的應用程式。
- 您的服務器通過檢查您的資料庫或您存盤它們的任何位置來驗證憑據,并在請求失敗時拒絕該請求。(查看 Auth0、Firebase Auth 或其他身份驗證服務,因為自己執行此操作可能會很痛苦,并且容易暴露潛在漏洞)
- 如果憑據有效,服務器會生成一個簽名的 JWT令牌,其中包含資料,例如用戶的用戶名。
- 服務器以正文以及包含 JWT 的 cookie 進行回應,然后瀏覽器將存盤該 cookie。
- 用戶從您的服務器請求一些特定于用戶的資料,瀏覽器將帶有 JWT 的 cookie 發送回您的服務器。
- 您的服務器通過檢查簽名來驗證 JWT 是否有效。如果有效,它將使用令牌中的用戶名來獲取用戶特定的資料。如果無效,則拒絕該請求。
因為簽名完全發生在服務器端(通常使用一些散列演算法和你不公開出售的秘密密鑰),所以幾乎不可能有人欺騙 JWT 令牌簽名。因此,您的服務器能夠 1. 如果簽名正確,則相信 JWT 令牌確實有效,并且 2. 找出用戶正在請求資料。
這是一個有助于解釋和形象化的視頻:https : //www.youtube.com/watch?v=soGRyl9ztjI
這是一個用于在 Node 中創建和驗證 JWT 的庫:https ://www.npmjs.com/package/jsonwebtoken
希望這能回答你的問題!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/370562.html
