好的,你有登錄表單,如果他們的密碼/用戶錯誤,你想禁止用戶5分鐘。 用戶可以連續嘗試幾次,直到被禁止。正在做臨時禁止
LOGIN_FAILS表:
- ID PK,串行/ AUTO_INCREMENT
- ip地址INT /文本/不管你喜歡
- 添加DATETIME/TIMESTAMP
SQL:
SELECT IF(COUNT(id) < 3, 'false', 'true') AS is_banned FROM LOGIN_FAILS WHERE ipaddress='1.2.3.4' AND added BETWEEN (NOW() - INTERVAL '5 minutes') AND NOW();
這可以是vi sualized作爲
班檢查timeblock:#####
失敗:1,2,3
失敗都設置爲時間範圍:
Time ->
========1==2=3==========
========######==========
現在你可以一次再試一次在一排:
========1######=========
現在你可以連續兩次再試一次:
========1==2######======
但正確的做法將舉行5分鐘
該區間========######==========
現在,您可以三次嘗試再次連續
========1==2=3######====
^^^^^^ Ignored
但你不希望使用當前時間作爲塊(0:00-0:05,0:05-0:10等),因爲如果禁令在0:04發生,則下一個禁止檢查時間塊爲0:05(=僅禁止1分鐘)。
那麼必須對給定的SQL語句添加/修改什麼,以便用戶可以總是連續嘗試N次,然後暫時禁止X分鐘?
編輯
因此,像
SELECT
IF(COUNT(id) < 3, 'false', 'true') AS is_banned
FROM
LOGIN_FAILS
WHERE
ipaddress='1.2.3.4' AND
added
BETWEEN
(
SELECT
MIN(added) AS min
FROM
LOGIN_FAILS
WHERE
ipaddress='1.2.3.4' AND
added <= (NOW() - INTERVAL 5 minutes)
ORDER BY
added
LIMIT 3
)
AND
NOW()
問題在哪裏? – McAden 2009-09-13 03:18:49
添加了問題。我認爲已經很明顯:) – raspi 2009-09-13 03:25:50