2012-11-15 114 views
2

即使我使用HTTPS,是否應使用散列(密碼+鹽)方法在客戶端散列密碼?或者我應該在它到達具有內置函數的SQL SERVER 2008 R2時進行哈希處理?謝謝。使用HTTPS時散列用戶密碼

+0

我想它會通過發送一個哈希和鹹味的密碼而不是明文來增加另一層保護。 – Andrew

回答

1

你爲什麼要在客戶端散列?這是一個用Javascript編寫的單頁面應用程序嗎?即使那樣,你也必須有一些連接到數據庫的服務器端語言(ASP.NET?PHP?)。在服務器端進行醃製和散列。客戶端對我來說味道不好......由於某些原因,如果您有邏輯和隨機生成發生在客戶端,salting/hashing過程似乎更容易受到攻擊。我無法指出特定的攻擊 - 但它似乎是推向客戶端的不必要的事情(除非可能無法獲得SSL)。

不管你是用你的服務器端語言還是直接在數據庫中做它都不是特別重要。我更喜歡在代碼中進行計算,然後將最終的散列發送到SQL。使用內置的SQL Server功能很煩人,版本之間存在問題 - 並且您的代碼永遠被鎖定在Microsoft-land中。

TL; DR做它服務器端,而不是客戶端,而不是直接在數據庫中。如果您希望在發送之前通過線路加密明文密碼,則必須使用HTTPS(絕對應該)。

+0

就像你的用戶決定攔截Javascript,而不是將密碼發送給你的數據庫,或者誰知道他們可以發送什麼。 – MikeMurko

+0

我同意邁克在客戶端的這一部分 - 如果有人禁用了JavaScript - 完全不加密?對於不使用數據庫我有更強烈的感受 - 這使我得到了與邁克一樣的結論。在服務器端代碼中執行。 – Fenton

0

據我所知,如果有人發現安全漏洞並從數據庫中竊取密碼列表,密碼的醃製(也)是有用的。如果鹽漬,用彩虹表等方法找回清晰的密碼幾乎是不可能的。否則,他們可能被破解。

0

如果您認爲HTTPS已損壞,則會產生很多安全後果。基本上所有東西都分崩離析

不要這樣做。這是浪費你的時間。以更好的方式使用它,例如開發用戶關心的功能。

只要做服務器上的標準哈希和醃製,並儘量不發明新的安全方案。

0

如果您使用SSL,則客戶端和服務器之間的通信將被加密。

問題的後半部分有點棘手。雖然SQL Server具有內置加密功能,但它存在訪問數據庫的任何人都可以使用的問題。

如果您在代碼中進行加密並將加密版本發送到數據庫,它會在數據庫遭到破壞時爲您提供保護 - 它們可能已損壞到您的數據庫中,但它們無法解密數據。

所以我的答案是......客戶端,而不是數據庫 - 加密和鹽在兩者之間的代碼!