2011-11-18 25 views
5

從我在網站上看到的很多帖子,由AJAX或傳統形式執行的登錄是一樣安全的。 (RE:Login/session cookies, Ajax and securityAjax login and javascript cookies, is this secure?JavaScript哈希在AJAX登錄調用,更安全?

我的問題(S)是/是:

  1. 如果我哈希(通過客戶端/ JavaScript的哈希 庫)用戶的密碼之前,我把它發送到服務器,我是否增加了人員安全度?

  2. 如果我放置一個表單令牌(一個隨機基礎,另一個基於時間),那麼是否涵蓋CSRF攻擊?

  3. 畢竟我有我所有的基地嗎?這個表格是否安全?
+1

如果您需要發送密碼(並且如果可能的話,還有其他所有情況,也有登錄會話cookie),請使用SSL。 – Thilo

回答

5

其實這可能是一個主要的安全問題。密碼被散列的原因是計劃失敗的一種手段。攻擊者可能訪問數據存儲(sql注入),然後獲得散列。如果您只是使用哈希登錄,那麼攻擊者不必破解已恢復的哈希以訪問應用程序。

重播攻擊也是一個問題。如果我在認證期間嗅探哈希,什麼阻止我重播該請求進行身份驗證?

使用消息摘要功能進行身份驗證的協議爲客戶端提供了一個隨機數,用作一次性salt。微軟的SMB NTLM身份驗證就是一個很好的例子,但它有a lot of problems

USE SSL,而不僅僅是登錄。 OWASP A9指出會話ID絕不能通過不安全的通道泄露。畢竟誰在乎密碼,如果你只是在幾毫秒後泄漏真正的認證證書。

大多數人不會爲登錄實施CSRF保護。畢竟攻擊者首先必須知道密碼,所以「會議騎行」是一個有爭議的問題。

+0

出於好奇,如果您在提交之前對密碼使用公鑰加密,然後使用匹配的私鑰解密服務器上的密碼,那會更好嗎? – Esailija

+0

@Esailija不對稱加密有其自身的問題,如重播攻擊,缺乏IV。但更重要的是,如果你不保護會話ID,那麼你沒有保護任何東西。任何攻擊者嗅探導線都將具有完全訪問權限。 – rook

+0

啊,是的,應該更多的思想閱讀你的答案。我完全錯過了第三段的最後部分......非常感謝您的回答。 – Esailija

0

如果攻擊者知道你在使用什麼哈希,那麼他們可以破解它。如果你想添加一個鹽,你必須把它發送到瀏覽器,攻擊者可以攔截它。將時間用作鹽也是行不通的,因爲只有相對較短的時間,所以他們也可以解決這個問題。

+0

「哈希」(與加密相反)通常是不可逆的。 –

+0

@DavidGelhar謝謝,我改變了措辭,這是我的一個糟糕的選擇。 – qw3n

+1

@大衛Gelhar他意味着一個微不足道的攻擊。開膛手約翰或者雨虹應該這樣做。 – rook

1

稍微放一邊,但在回答問題3。另外請記住,AJAX和標準格式也就像不安全一樣。

實施安全認證非常困難。除非你是做學術練習,否則我會強烈建議使用你的框架提供的庫,如果你有足夠的幸運有一個好的。

您還需要考慮諸如以下等事情。

  • 實現適當的隨機和不可猜測的會話ID以用於會話cookie。
  • 不允許會話ID被強制。
  • 當權限或憑證發生變化時(例如,因爲用戶已登錄或退出), 立即使會話無效並開始新的會話。
  • 提供註銷功能,並確保在註銷時使會話無效。
  • 將Cookie設置爲HttpOnly - 最好需要HTTPS,並將cookie設置爲僅安全。
  • 考慮限制會話有效性,以包括檢查有助於與用戶匹配的一些其他信息,例如,用戶代理。
  • 在未使用之後總是會話過期,並且不要通過將用戶重新連接到其舊會話來實現「保持登錄狀態」。
  • 確保2個會話不能同時具有相同的會話ID
  • 確保當會話失效時會破壞所有會話數據。一位新來的用戶可能剛好被分配了以前使用過的會話ID。此新會話不得訪問之前根據會話標識設置的會話數據。
+0

這太棒了!是否在PHP的session_start()函數中內置了「確保2個會話不能同時具有相同的會話ID」? –

+1

@JosephSzymborski是的。你可能會發現這個有趣的重新php http://phpsec.org/projects/guide/4.html – Cheekysoft