簡體   English   中英

保護基於令牌的身份驗證系統的令牌

[英]Securing the token of a token based authentication system

我正在使用基於令牌的身份驗證來訪問我為站點設計的一些原始Web API。 登錄時,用戶名和密碼將發布到登錄API,並使用唯一的密鑰生成令牌,並將密鑰存儲在數據庫中。 在每個后續呼叫中,令牌與請求一起發送,並在服務器上使用密鑰進行驗證。

我正在使用一個Web應用程序來使用此API服務並向用戶提供前端。 該Web應用程序是使用HTML / Bootstrap / JQuery設計的,后端是用php編寫的。

我已經成功測試了我的應用程序,並且基於令牌的身份驗證有效。 但是,我有一個擔憂。 我發現僅使用瀏覽器地址欄上的url編碼即可直接顯示用戶ID和令牌。

http://hasconpanel.ckoysolutions.com/hasconpanel.php?inputs={%20%22username%22%20:%20%22Debopam%20Parua%22%20,%20%22uid%22%20:%20%2220170520193421DP%22%20,%20%22token%22%20:%20%22Sa2pHyooWPoI79vfvJzLlw7UO%252B2p5hOpBttkEq7LQ%252BjAGm9XEmxfhLAcnJoLbqrsXCp75%252BG1M7nEUoCgsDVbIQ%253D%253D%22%20,%20%22list_of_devices%22%20:%20[{%22device_code%22:%22b8:27:eb:f1:b3:0f%22,%22device_name%22:%22First-Pi%22}]%20}

現在,如果復制了該地址,或者假定使瀏覽器恢復了上一個會話,那么無論是誰嘗試訪問它,他們都會得到一個條目。 特別是在公用計算機中心的情況下,如果有人使用其憑據訪問我的Web應用程序,並且在殺死瀏覽器之前忘記注銷,則令牌系統似乎會嚴重失敗。 無論如何,是否有像加密令牌一樣保護令牌的安全? 還是因為瀏覽器/瀏覽器選項卡關閉或至少不在地址欄上顯示而導致應用程序不存儲參數? 我曾考慮過在每次請求時都制作一個新令牌,但是這會大大降低系統速度,因此我想避免使用它。

請提出解決此問題的方法。

提前致謝。

編輯:解釋系統現在如何工作:

api系統托管在共享服務器的主域中,而應用程序托管在子域中。 主域還托管一些Web服務,這些Web服務是從家里安裝的一些樹莓pis調用的。

它是這樣工作的,從主要網站進行登錄,成功登錄后,將通過帶有用戶ID,令牌和用戶可用設備列表的get調用來調用Web應用。 提供檢查以防止在沒有這三個參數的情況下訪問應用程序頁面。 在新負載下,用戶可以從下拉菜單中選擇設備。 現在,每個工作設備都可以運行三個獨立的系統。 因此,在選擇設備時,將再次對應用程序進行get調用,將所選設備作為參數與之前的三個參數一起添加。 這在地址欄上顯示令牌和uid。

基於令牌的身份驗證在網絡世界中非常標准。 具體細節各不相同,但是您要嘗試做的當然並不瘋狂。 但是,您的安全問題是有效的,並且有許多潛在的解決方案:

  1. 專門使用HTTPS。 這將保護您的令牌不被用戶和您之間的每個人輕易讀取。 實際上,不管其他任何事情,都應這樣做。 出於安全性考慮,如今應將HTTPS視為默認值:假裝不建議使用HTTP。
  2. 將令牌移到請求的標頭而不是URL。 從安全的角度來看,只要您使用HTTPS,這實際上並不會改變任何東西,但是對於業界來說,這是相當標准的。 它還會將令牌保留在瀏覽器歷史記錄之外。

奇怪的是,瀏覽器地址欄中顯示了一個URL。 我希望客戶端應用程序專門通過ajax發出請求,這意味着地址欄中永遠不會有任何內容。 您可能需要詳細說明此應用程序的工作方式。 我懷疑您需要進行重構,以使您的應用程序URL都不會最終出現在地址欄中,而是僅通過AJAX請求進行操作。

HTTPS仍然是最重要的部分。 DNS查找后,您的整個交易將安全地傳輸,因此中間人不能竊取令牌。 這是確保安全的最重要步驟。 如果您不使用HTTPS,則最好將其廣播給全世界。 當然,如果您使用查詢參數中的令牌對URL進行非ajax請求,則該令牌將在瀏覽器的地址欄和歷史記錄中可見。 同樣,通過僅使用ajax請求來避免這種情況,並將cookie放在標題中。

將HTTPS與僅ajax請求一起使用后,令牌被盜的機會就會大大減少。 盡管如此,它仍然可能發生(尤其是通過XSS攻擊),因此請熟悉“縱深防御”的原理。 此外,您可以采取一些步驟來嘗試檢測出被盜的令牌並使該令牌無效。 像:

  1. 如果IP地址更改,則使令牌無效(供用戶重新登錄)(盡管這可能會影響移動用戶,這可能是不希望的)
  2. 如果用戶代理更改,則使令牌無效(盡管可以欺騙)
  3. 強制服務器端最大會話長度
  4. 確保並要求用戶重新驗證是否要更改電子郵件/密碼。

這些只是我腦海中的一些建議。 同樣,這是一個非常標准的問題,因此google將是您的朋友。

暫無
暫無

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

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