2010-10-23 37 views
3

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

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

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

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

回答

12

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

+0

在混合cordova android移動應用程序中,使用https/SSL傳遞沒有加密密碼的ajax調用。它是否安全? – Saj 2018-02-03 11:05:35

1

這裏是你能做什麼:

散列密碼,並存儲在數據庫

在客戶端:哈希密碼,再加入鹽(串連session_id的字符串),然後再次

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

[編輯:然後比較服務器上生成的哈希鹽哈希與客戶端發送的哈希哈希哈希]

現在攔截你的散列鹽散列密碼是相當無用的,因爲它只對那個特定的會話有效......

+0

請參閱我的編輯。 : -/ – 2010-10-23 10:31:05

12

對於技術上的問題,你可以。如果你有機會到單向加密功能crypt(text,key)支持crypt(crypt(T,A),B) == crypt(crypt(T,B),A)你可以做到以下幾點:

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

所有這些都是不必要的複雜的工作,需要付出很大的努力才能正確安全地實施。 購買SSL證書並使用HTTPS更容易達到這個級別的安全性,甚至更高。

+0

請參閱我的編輯。 : - / – 2010-10-23 10:30:49

0

你在找什麼是「零知識協議」。這是一種溝通的方式,你知道密碼而不發送它。您可以在用戶瀏覽器中運行的JavaScript和服務器之間進行通信。

紅利,即使連接未加密,這些協議通常也是安全的。請注意,依靠這一點而不使用SSL會很愚蠢,因爲中間的一個人只需用一個只發送密碼的類似功能來替換你的零知識協議實現。