2012-04-11 31 views
2

我正在硬化我的網絡appliocation的安全層,和我有一個登錄蠻力保護實施的幾個問題:存儲首選登錄蠻力對策

  • 我應該使用什麼樣的存儲存儲每個用戶/ IP失敗登錄的計數器?如果一個簡單的APC/Memcache條目足夠了,還是需要一個更穩定和持久的存儲方法,也意味着在每次登錄時都會寫入額外的SQL查詢或文件?或者甚至將它們存儲在會話條目中(我的會話由Memcache處理,所以它們完全相同)。

  • 關於全系統計數器的相同問題(爲了觸發登錄鎖定或限制分佈式蠻力企圖...)?我認爲這裏的持久性更重要,但它也意味着在每個登錄中查詢/寫入。

  • 對檢測到的登錄蠻力企圖進行適當的返回響應是什麼?我應該返回一個404錯誤,503服務不可用?甚至是通過DROPing甚至通過IPTables/Netfilter對攻擊者IP進行深入攻擊?我正在談論一個真正檢測到的蠻力企圖,而不是一個用戶登錄失敗的情況,因爲他無法回憶他的通行證。

我原本以爲一個緩存存儲(APC /內存緩存),就足以存儲計數器,但我擔心的是,高速緩存可能會失敗是因爲什麼原因,使得這一防禦層是無效的。

對於其他的考慮,我已經閱讀了一些不錯的帖子,如What-is-the-best-distributed-brute-force-countermeasureNumber-of-attempts-to-brute-force-an-average-password,但隨時拋出任何建議,將不勝感激。

回答

0

首先,你必須識別數據的正確範圍,然後速度和優化困擾。

如上所述,緩存存儲可能會失敗。這清楚地表明您的數據的範圍比緩存的範圍更廣。因此,你不應該把它們存儲在那裏。數據庫是一個很好的選擇。

現在,如果您關心速度(而且您應該是),現在是優化流程的時候了。你已經有一個緩存層,所以用它來緩存這個額外的讀取查詢。另一方面,您不應該爲額外的更新查詢而煩惱,因爲這是不影響整體用戶體驗的特殊情況。

至於你的第三個問題,對檢測到的蠻力嘗試的響應類型並不重要。重要的是時間:比如20秒的延遲。這應該足以使暴力在這一生中不可能發生。

+0

範圍的觀點有所幫助,我想我只是得到最好的,並做一個緩存+ MySQL存儲。如果緩存失敗,那麼計數器仍然可以在數據庫中使用,但是如果緩存處於啓動狀態,它將阻止對每個日誌記錄的系統SELECT讀取查詢。 – Claaker 2012-04-11 09:13:17