2011-02-23 86 views
6

我讀過很多關於CouchDB身份驗證的內容,特別是關於Cookie身份驗證。 我還在做一些測試,一切似乎與此命令運行良好,例如:CouchDB身份驗證

捲曲-vx POST $ HOST/_session -H「應用/的X WWW的形式,進行了urlencoded」 -D' name = foo & password = bar'

我得到一個我可以使用的Cookie。 但我的觀點是,無論何時,當我看到Web上的樣本時,用戶名和密碼總是以純文本形式發送。

我對安全性並不陌生,但如果我首先必須清楚地發送我的憑據,那麼Cookie Auth方法的優點是什麼?

有沒有辦法發送至少密碼散列? 有了類似的東西IDK:

捲曲-vx POST $ HOST/_session -H '應用/的X WWW的形式,進行了urlencoded' -D '名稱= foo的& hashed_pa​​ssword = hashed_bar'

乾杯

阿爾諾

回答

11

如果你把你的密碼散列比所有的攻擊者需要知道的是你的哈希密碼所以它不會解決在發送明文密碼的問題 - 現在你會公頃存在以明文形式發送哈希的問題。

還要記住,即使解決了這個問題,您仍然會以明文形式發送您的cookie,從而容易受到會話劫持的影響。

(另外還有HTTP摘要訪問認證,但並非沒有自己的問題 - 但CouchDB的不支持它,我檢查反正最後一次)

你應該做的是要始終使用HTTPS進行任何身份驗證的CouchDB通過任何網絡訪問,除了127.0.0.0網絡。

(是的,幾乎所有的Web 的例子和書顯示了使用通過HTTP這在我看來是一個等待發生的災難的基本或cookie認證。)

+0

謝謝,所以我在使用HTTPS和小型應用程序,其中安全性不是一個大問題我想管理我的數據庫管理員和數據庫用戶(讀者),以便從不使用服務器管理員憑證是一個很好的解決方案? – Arnaud

2

隨着1.1版本,CouchDB支持通過HTTPS訪問API。您可以直接使用HTTPS,而不是使用HTTPS代理,以保護通過線路傳輸的密碼。請參閱Feature Guide獲取1.1。

2

使用Https是正確的答案。

我會補充說明計算服務器端散列的重要性。 哈希是一種單向函數,將輸入轉換爲存儲在服務器中的鍵值。如果有人攻擊服務器並獲得散列輸入(鍵值),他將無法從中推導出輸入值來模擬你。

如果您計算客戶端的密鑰值,並且沒有任何一種方式在服務器上執行轉換,它相當於以明文形式存儲密碼。設法獲取存儲在服務器上的密鑰值的副本的人可以通過簡單地發送密鑰值輕鬆地模擬您。

因此,爲了保護密碼數據庫,需要在服務器端應用在提交的密碼上具有加密/隨機種子的密碼安全的單向函數(即,256)。

通過散列發送的密碼除了在服務器端對其進行散列處理之外,如果發送的散列值始終相同,將無助於突變。然而,通過SSL連接發送的間諜數據並不是微不足道的。

然而,在客戶端散列密碼有一個重大的好處。通過嘗試使用通用密碼字典猜測密碼,服務器上的暴力攻擊將變得無望,因爲客戶端的散列會隨機化密碼。

我們可能會在哈希中添加一些鹽以防止使用哈希密碼字典。當用戶鍵入他的用戶ID時,詢問用戶對服務器的具體鹽值。然後使用返回的salt或散列種子值在客戶端生成散列密碼。

暴力密碼猜測可能會阻礙服務器端通過增加重試之間的時間間隔。但是這通常適用於一個特定的連接。每兩次嘗試後攻擊者可能會重新連接。然後需要跟蹤IP地址來識別這種類型的攻擊。