首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web 入侵檢測與防禦實戰:基於 EasyJWeb 框架的實現解析

     編輯:Java 相關知識

核心原理

記錄每個用戶訪問信息(IP、用戶名、首次訪問時間、最近訪問時間、訪問次數、狀態),依據策略(如 10 秒內 10 次請求)判定惡意刷新,攔截後續處理並返回友好提示(如「請等待 60 秒後再刷新」)。

架構設計

  • 純 JSP/Servlet 應用:實現 `Filter`,在 `doFilter` 中檢測,配置 `web.xml` 映射 `/*`。
  • 框架應用:在框架入口引擎 (如 EasyJWeb `ActionServlet`) 直接調用檢測邏輯,或同樣用 Filter 實現。

核心組件

1. UserConnect (JavaBean)

封裝用戶訪問狀態:`userName`、`ip`、`firstFailureTime`、`lastLoginTime`、`failureTimes`、`status (0正常/-1鎖定)`。

2. UserConnectManage (監控線程 + 判斷邏輯)

  • 靜態 `Map users` 緩存 (key=ip:userName)。
  • 後台守護線程 `CheckTimeOut` 每 2 秒掃描:清理超時記錄、超過最大在線數 (默認 200) 時強制清理一半。
  • 核心方法 `checkLoginValidate(ip, userName)`:
     - 首次訪問創建記錄並啟動守護線程。
     - 統計失敗次數,若在 `maxFailureInterval` (10s) 內超過 `maxFailureTimes` (10) → 鎖定返回 false。
     - 鎖定狀態下等待 `waitInterval` (60s) 後自動重置計數器。
     - 正常情況計數器+1 返回 true。
  • 提供 `reset/remove/clear` 管理方法及參數動態調整 setter。

調用示例

if (!UserConnectManage.checkLoginValidate(request.getRemoteAddr(), "guest")) {
    info(request, response, new Exception("您對頁面的刷新太快,請等待" + UserConnectManage.getWaitInterval()/1000 + "秒後再刷新頁面!"));
    return;
}

擴展建議

高併發場景可引入數據庫/Redis 持久化用戶訪問信息;策略維度可增加 User-Agent、SessionID、請求路徑等特徵;集成日誌分析系統實現自動化封禁。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved