2014-10-01 92 views
0

我使用私人訪問在PHP中構建應用程序。有登錄兩種方式:在PHP中使用cookie登錄安全問題

  • 登錄方式:用戶名和密碼
  • 餅乾:餅乾記得用散列信息(用戶名,鹽等)

爲了防止機器人做了畜生強制攻擊,服務器創建一個會話(一個帶有session_start的cookie),在4次嘗試之後,用戶必須等待5秒纔再次嘗試。我使用超全局變量$ _SESSION來檢查某人嘗試連接的次數。

我的問題是關於不允許cookies的用戶。在這種情況下,他們不會每4次嘗試等待5秒鐘。我有點困惑關於防止暴力破解的最好方法:

  1. 在檢查一個IP有多少次試圖
  2. 或者簡單地防止用戶在沒有會話cookie從連接連接數據庫創建一個登錄表

感謝,

+0

您的#2無法正常工作,因爲* everyone在第一次登錄嘗試時將擁有* no session cookie *。限制嘗試的唯一解決方案是跟蹤每個IP;在這種情況下,Cookie根本沒有任何作用。 – deceze 2014-10-01 12:51:52

+0

在會話中存儲登錄嘗試是毫無意義的 - 因爲我只需要重新開始一個新會話即可。 (和「獲得一個新的會話」基本上只需要發送一個不同的隨機會話ID。)您應該將該信息存儲在用戶對象(在您的數據庫中)。 – CBroe 2014-10-01 12:53:02

+0

好的,謝謝,我想每個人在第一次嘗試時都會有一個會話cookie,因爲它是在checkLogin腳本的開頭創建的。事實上,一個PHP會話只需要發送一個隨機會話,沒有想到這一點。在數據庫中存儲信息看起來不錯。謝謝, – Yoan 2014-10-01 13:01:38

回答

-1

我肯定去的基於數據庫的解決方案。也許鎖定帳戶2分鐘後,5次失敗的嘗試,但這只是一個個人決定..但是,你可能不想阻止IPs,因爲很多大公司甚至國家溝通使用一個NAT的IP,而不是我鎖定該帳戶。

+0

您提到阻止該帳戶,但是帳戶名稱是由強力填充的帳戶將被阻止?或者你想阻止所有多個輸入的帳戶名稱和氾濫你db? – 2014-10-03 15:37:03

-2
+0

感謝您的鏈接,我看了一下,看起來正是我需要的。 – Yoan 2014-10-01 13:05:04

+0

您的歡迎@Yoan。太糟糕了,它會降低投票。可能是因爲代碼是舊的,PDO等應該被使用,但它的目的是要給你一個關於限制登錄嘗試的想法。順便說一句:我發現這個鏈接在這裏堆棧溢出在UP投票答案:http://stackoverflow.com/a/17912394/2151104 – 2014-10-01 13:34:13