[Security] 防止蠻力登錄網站


Answers

在我看來,有幾種可能性,每種都有利弊:

強制安全密碼

  • 專業 :將防止字典攻擊
  • 騙子 :也會阻止流行,因為大多數用戶不能記住複雜的密碼,即使你向他們解釋,如何容易記住他們。 例如,通過記住句子:“我在Mall購買了一個5美分的蘋果”導致“Ib1Af5CitM”。

多次嘗試後鎖定

  • :將減慢自動化測試
  • Con :為第三方鎖定用戶很容易
  • Con :在數據庫中使它們持久化可能會導致在諸如Twitter或可比較的大型服務中進行大量的寫入過程。

驗證碼

  • Pro :他們阻止自動測試
  • Con :他們在計算時間
  • Con :會“減慢”用戶體驗
  • 巨大的CON :他們不是無障礙的

簡單的知識檢查

  • :將阻止自動測試
  • 騙子 :“簡單”是在旁觀者的眼中。
  • Con :會“減慢”用戶體驗

不同的登錄名和用戶名

  • :這是一個技術,這是很難看到,但在我看來,一個相當好的開始,以防止暴力攻擊。
  • Con :取決於用戶對這兩個名字的選擇。

使用整個句子作為密碼

  • Pro :增加可搜索空間的大小。
  • Pro :大多數用戶更容易記住。
  • 騙局 :取決於用戶的選擇。

正如你所看到的,“好”的解決方案都取決於用戶的選擇,這再次揭示了用戶是鏈中最薄弱的一環。

還有其他建議嗎?

Question

作為對最近的Twitter劫持傑夫的字典攻擊的帖子的回應,什麼是保護您的網站免受蠻力登錄攻擊的最佳方式?

傑夫的帖子建議,對每個嘗試登錄的延遲時間會有所增加,並且評論中的建議是在第二次失敗嘗試後添加驗證碼。

這兩個看起來都是好主意,但你怎麼知道它是什麼“嘗試數字”? 您不能依靠會話ID(因為攻擊者每次都可以更改)或IP地址(更好,但易受殭屍網絡攻擊)。 簡單地記錄用戶名可以使用延遲方法鎖定一個合法用戶(或者至少使他們的登錄過程非常緩慢)。

思考? 建議?




我認為你應該記錄用戶名。 這是唯一的常數(任何其他可以被欺騙)。 是的,它可以鎖定合法用戶一天。 但是,如果我必須選擇一個黑客帳戶和一個關閉的帳戶(一天),我肯定選擇了鎖。

順便說一下,在第三次嘗試失敗(在一定時間內)之後,您可以鎖定帳戶,並向所有者發送發行郵件。 該郵件包含解鎖該帳戶的鏈接。 這對用戶來說是一個輕微的負擔,但是破解者被阻止。 如果連郵件賬號都被黑了,你可以設定每天解鎖次數的限制。




你可以添加一些形式的CAPTCHA測試。 但是要注意,大多數人都會讓人更加難以接受,或者讓人感到不適。 CAPTCHA的一個有趣的形式是提出一個問題,

2和2的總和是多少?

如果您記錄最後一次登錄失敗,則可以跳過驗證碼(如果足夠長)。 如果最後一次失敗是在過去的10分鐘內,那麼只做CAPTCHA測試。




舊帖子,但讓我發布我在2016年底這個。希望它仍然可以幫助。

這是一個簡單的方法,但我認為它是強大的,以防止登錄攻擊。 至少我總是把它用在我的每一個網頁上。 我們不需要CAPTCHA或任何其他第三方插件。

當用戶第一次登錄時。 我們創建一個會話

$_SESSION['loginFail'] = 10; // any number you prefer

如果登錄成功,那麼我們將銷毀它並讓用戶登錄。

unset($_SESSION['loginFail']); // put it after create login session

但是如果用戶失敗,就像我們通常向他們發送錯誤信息一樣,同時我們把會話減少1:

$_SESSION['loginFail']-- ; // reduce 1 for every error

如果用戶失敗了10次,我們會將他們引導到其他網站或任何網頁。

if (!isset($_SESSION['loginFail'])) { 

     if ($_SESSION['login_fail'] < 1 ) {

     header('Location:https://google.com/'); // or any web page

     exit();

}
}

這樣,用戶就不能打開或進入我們的登錄頁面,導致它已被重定向到其他網站。

用戶必須關閉瀏覽器(以銷毀我們創建的會話loginFail),再次打開它,再次看到我們的登錄頁面。

有幫助嗎?




我傾向於同意大多數其他意見:

  • X嘗試密碼失敗後鎖定
  • 計數失敗的用戶名嘗試
  • 可選擇使用CAPTCHA(例如,嘗試1-2正常,嘗試3-5被CAPTCHA'd,進一步嘗試被阻止15分鐘)。
  • 可以選擇發送電子郵件給賬戶所有者以刪除該塊

我想指出的是,你應該非常小心地強制使用“強”的密碼,因為這通常意味著它們只會被寫在桌子上的貼在顯示器上的貼子上。 而且,一些密碼策略導致可預測的密碼。 例如:

如果密碼不能是任何以前使用過的密碼,並且必須包含一個數字,那麼它很可能是任何通用密碼,後面是一個連續的數字。 如果你必須每6個月更換一次密碼,而且有兩年的時間,那麼他們的密碼可能就是password4

說你更加限制它:至少8個字符,不能有任何連續的字母,必須有一個字母,數字和特殊字符(這是一個真正的密碼策略,許多人會認為是安全的)。 試圖闖入約翰·昆西·史密斯的賬戶? 知道他3月6日出生? 有一個很好的機會,他的密碼是像jqs0306! (或者jqs0306〜 )。

現在,我並不是說讓用戶擁有密碼也是一個好主意,只要不要自欺欺人地認為強制的“安全”密碼是安全的。




像大多數銀行一樣,在X登錄失敗後鎖定用戶名/賬戶。 但是我不會像銀行一樣嚴格,因為你必須打電話來解鎖你的賬戶。 我會在1-5分鐘內暫時鎖定。 當然,除非網絡應用程序像銀行一樣對數據敏感。 :)