這是一個相當普遍的問題。想象一下現代的「單頁」JavaScript Web應用程序,它依靠AJAX調用其餘的API訪問數據。Webapp驗證其餘API
其餘的API只能通過提供唯一的令牌來訪問,該令牌是註冊給用戶的。通過提供一些端點的用戶名和密碼可以檢索(或創建)令牌,例如, /login
。
現在,一旦用戶檢索到令牌,我該如何存儲它?我知道一些可能的方法,但我不知道什麼是安全的。
將它存儲在cookie中:不!導致cookie暴露給文件系統,並且可能容易受到攻擊。
將其存儲在localstorage中的瀏覽器:好吧,可能不是。您訪問的任何頁面均可訪問本地存儲,因此具有抓取功能的惡意網站可能會抓取它。
將其存儲在內存中的JavaScript,直到用戶離開頁面:這應該是相對安全的,我會假設。但是如果我想記住訪問之間的登錄怎麼辦?然後我需要在服務器上保留一個會話嗎?如果我需要這個會話,甚至使用令牌的意義何在?不妨直接在每個請求中重新發送用戶名和密碼,對吧?
我還沒有想到的其他解決方案?人們如何做到這一點?
我不會說您的文件系統很容易被攻擊者利用。 Cookie主要用於存儲API密鑰:只記得加密客戶端和服務器之間的傳輸。 – supertopi