簡體   English   中英

使用ajax請求安全地發送密碼

[英]Send password safely using an ajax request

只是要知道,是否可以安全地通過Ajax請求發送密碼?

我有一個登錄框調用ajax請求來嘗試登錄/傳遞並檢索有錯誤的JSON對象(如果有的話)。

我應該使用表單重定向嗎?

[編輯]將加密密碼存儲在數據庫中不是解決方案,因為ajax發送的登錄名和密碼是訪問數據庫本身的登錄名/密碼(內部應用程序)。

發送無法被第三方攔截的內容的唯一方法是使用HTTPS而不是常規HTTP。 這樣,服務器和客戶端之間發送的所有內容都是高度加密的。

對於它的技術地獄,你可以。 如果您可以訪問支持crypt(crypt(T,A),B) == crypt(crypt(T,B),A)的單向加密函數crypt(text,key) ,則可以執行以下操作:

  • 為您的應用程序准備一個密鑰, KEY 別告訴任何人。
  • 當用戶注冊時,將crypt(password,KEY)存儲在數據庫中。
  • 當用戶想要登錄時,向他們發送隨機生成的密鑰RAND
  • 用戶鍵入密碼,表單計算並通過不安全的AJAX發送crypt(password,RAND) 密碼永遠不會離開用戶的計算機。
  • 服務器從數據庫中的表單響應, crypt(crypt(password,KEY),RAND)計算crypt(crypt(password,RAND),KEY) ,並比較這兩者。 他們應該是平等的。

所有這些都是不必要的復雜,需要花費很多精力才能正確安全地實施。 購買SSL證書和使用HTTPS幾個數量級更容易實現這種安全級別,甚至更多。

這是你可以做的:

哈希密碼並存儲在數據庫中

在客戶端:哈希密碼,然后添加salt(連接session_id字符串),然后再次哈希

在服務器上:從數據庫中取出散列的pw,然后添加salt(連接session_id字符串),然后再次散列

[編輯:然后將服務器上生成的hash-salt-hash與客戶端發送的hash-salt-hash進行比較]

攔截你的hash-salt-hash密碼現在是沒用的,因為它只對那個特定的會話有效...

您正在尋找的是“零知識協議”。 這是一種溝通的方式,你知道密碼而不發送它。 您將在用戶瀏覽器中運行的javascript與服務器之間進行通信。

此外,即使連接未加密,這些協議通常也是安全的。 請注意,依賴於此並且不使用SSL將是愚蠢的,因為中間的人只需用一個只發送密碼的外觀相似的函數來替換你的零知識協議實現。

暫無
暫無

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

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