2017-06-06 314 views
0

我正在使用基於令牌的身份驗證訪問我爲我的網站設計的一些原始Web API。在登錄時,用戶名和密碼將發佈到登錄API,並且它會生成一個具有唯一密鑰的令牌,並且密鑰將存儲在數據庫中。在隨後的每次調用中,令牌都隨請求一起發送,並在服務器上使用密鑰進行驗證。保護基於令牌的身份驗證系統的令牌

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

我已成功測試我的應用程序和基於令牌的身份驗證工作。但是,我有一個問題。我發現用戶ID和令牌直接顯示,只在瀏覽器的地址欄上使用url編碼。現在

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服務。

這是它是如何工作的,登錄是從主網站進行的,並且在成功登錄後,將通過帶有用戶ID,令牌和用戶工作設備列表的get調用來調用Web應用程序。提供檢查是爲了防止在沒有這三個參數的情況下訪問應用程序頁面。在新加載時,用戶可以從下拉菜單中選擇設備。現在,這些工作設備中的每一個都可以運行三個獨立的系統。因此,在選擇設備時,應用程序會再次發出獲取呼叫,並將選定設備作爲參數與前三個參數一起添加。這會在地址欄上顯示令牌和uid。

+0

您可以使用發佈API請求的請求。 –

+0

只要他通過HTTP –

+0

運行,發佈不會保護他,現在可以獲得免費的SSL證書,所以確實沒有理由不使用https。如果用戶需要使用電子郵件和密碼進行註冊,則需要使用HTTPS:https://letsencrypt.org/ –

回答

2

基於令牌的認證在網絡世界中非常標準。細節各不相同,但你試圖做的肯定不是瘋狂的。但是,您的安全問題是有效的,並且存在許多可能的解決方案:

  1. 專門使用HTTPS。這將保護您的令牌不被用戶和您之間的每個人輕易讀取。其實,不管別的什麼。目前,HTTPS應該被認爲是默認的安全目的:假裝HTTP已被棄用。
  2. 將令牌移動到請求的標題中,而不是URL。只要您使用HTTPS,從安全角度來看,這實際上並不會改變任何事情,但它對於行業來說是相當標準的。它還會將令牌保留在瀏覽器歷史記錄之外。

奇怪的是,您在瀏覽器地址欄中顯示了一個URL。我希望客戶端應用程序能夠通過ajax完全發出請求,這意味着地址欄中應該沒有任何東西。您可能需要更詳細地說明此應用程序的工作方式。我懷疑你需要重構,這樣你的任何應用程序URL都不會在地址欄中出現,而是隻能通過AJAX請求進行操作。

不過,HTTPS是最重要的部分。 DNS查找後的整個交易將被安全傳輸,因此令牌不會被中間人竊取。這是你必須採取的最重要的步驟,以確保它。如果您不使用HTTPS,那麼您最好將它廣播給全世界。當然,如果您正在使用查詢參數中的令牌向網址發送非Ajax請求,那麼該令牌將在瀏覽器的地址欄和歷史記錄中可見。再次,避免通過僅使用ajax請求並將cookie放在標頭中。

一旦HTTPS與ajax-only請求一起就位,盜用令牌的機會就會小得多。不過,它可能發生(特別是通過XSS攻擊),所以請熟悉「縱深防禦」的原則。此外,您可以採取措施嘗試檢測被盜的令牌並使其失效。事情是這樣:

  1. 無效令牌(用戶重新登錄),如果IP地址的變化(雖然這可能會影響移動用戶,這可能是不可取的)
  2. 如果用戶無效令牌代理更改(儘管可能會被欺騙)
  3. 強制服務器端最大會話長度
  4. 確保並要求用戶在需要更改電子郵件/密碼時重新進行身份驗證。

這些只是我的頭頂幾個建議。再次,這是一個非常標準的問題,所以谷歌將成爲你的朋友。

+0

您好, 感謝您的回覆,並對最近的回覆感到抱歉。 我會盡我所能解釋系統的工作。我正在編輯我的帖子以添加信息。 –