這是老師給的一個作業,讓先自行把會員系統做完的同學額外練習用的,功能需求是如果在登入頁嘗試登入超過五次失敗就鎖IP,至於鎖IP的後續動作就沒有說了,比如是要在登入頁顯示訊息,還是把使用者導到別頁去或是其它動作就隨個人去發揮了。

我的做法是一旦鎖了IP之後,就只會停在首頁中,任何的輸入動作都不會再去對資料庫或其它頁面造成影響。

至於原理則是新增一張資料表來紀錄被鎖的IP及封鎖的時間區間,然後在原本的login_log資料表新增一個欄位來紀錄失敗次數,每次要新增登入紀錄時就寫入一筆新的紀錄及次數,然後如果次數超過五次就會在封鎖的資料表中寫入IP及時間區段,並且在session做個記號,之後登入頁面就可以先判斷session是否存在,如果session不存在再去資料表撈資料看這ip是否還在封鎖的時間內,如果在封鎖時間內,則原本登入頁的表單傳送位置會改成本頁,這樣使用者就只會在本頁一直loop,如果不在封鎖時間內或過了封鎖時間,則表單的傳送位置會改成真正的登入檢查頁,然後繼續去資料表撈資料來比對使用者帳號密碼是否正確,同時也開始一個新的檢查和計數的循環。

封鎖IP 資料表

登入紀錄表增加一個累計次數的爛位

登入紀錄表,每新增一筆紀錄,如果有錯誤就累計次數

登入頁的提示訊息

封鎖IP資料表的紀錄,可以紀錄重覆IP被封鎖的紀錄,做日後分析之用

可以封鎖IP當然也可以封鎖帳號,不過到底是要封鎖IP還是封鎖帳號,要看具體的需求為何,不同的做法也會根據效能的考量來製定,比如我以session來做紀錄,就可以減少不少次的資料庫存取動作,以新增紀錄的方式來做計數也比直接更新單一紀錄的方式來得有效率。

最後修改日期: 2018-10-03

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。