国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺析Java Web應(yīng)用中的入侵檢測(cè)

開發(fā) 后端
Java Web應(yīng)用程中我們有時(shí)候需要為應(yīng)用程序增加一個(gè)入侵檢測(cè)程序來防止惡意刷新的功能,防止非法用戶不斷的往Web應(yīng)用中重復(fù)發(fā)送數(shù)據(jù)。

一、簡(jiǎn)介

在Java Web應(yīng)用程中,特別是網(wǎng)站開發(fā)中,我們有時(shí)候需要為應(yīng)用程序增加一個(gè)入侵檢測(cè)程序來防止惡意刷新的功能,防止非法用戶不斷的往Web應(yīng)用中重復(fù)發(fā)送數(shù)據(jù)。當(dāng)然,入侵檢測(cè)可以用很多方法實(shí)現(xiàn),包括軟件、硬件防火墻,入侵檢測(cè)的策略也很多。在這里我們主要介紹的是Java Web應(yīng)用程序中通過軟件的方式實(shí)現(xiàn)簡(jiǎn)單的入侵檢測(cè)及防御。

該方法的實(shí)現(xiàn)原理很簡(jiǎn)單,就是用戶訪問Web系統(tǒng)時(shí)記錄每個(gè)用戶的信息,然后進(jìn)行對(duì)照,并根據(jù)設(shè)定的策略(比如:1秒鐘刷新頁面10次)判斷用戶是否屬于惡意刷新。

 Java Web應(yīng)用大致分為兩種,一種純JSP(+Java Bean)方式,一種是基于框架(如Struts、EasyJWeb等)的。第一種方式的Java Web可以通過Java Servlet中的Filter接口實(shí)現(xiàn),也即實(shí)現(xiàn)一個(gè)Filter接口,在其doFilter方法中插入入侵檢測(cè)程序,然后再web.xml中作簡(jiǎn)單的配置即可。在基于框架的Web應(yīng)用中,由于所有應(yīng)用都有一個(gè)入口,因此可以把入侵檢測(cè)的程序直接插入框架入口引擎中,使框架本身支持入侵檢測(cè)功能。當(dāng)然,也可以通過實(shí)現(xiàn)Filter接口來實(shí)現(xiàn)。

在EasyJWeb框架中,已經(jīng)置入了簡(jiǎn)單入侵檢測(cè)的程序,因此,這里我們以EasyJWeb框架為例,介紹具體的實(shí)現(xiàn)方法及源碼,完整的代碼可以在EasyJWeb源碼中找到。

在基于EasyJWeb的Java Web應(yīng)用中(如http://www.easyjf.com/bbs/),默認(rèn)情況下你只要連續(xù)刷新頁面次數(shù)過多,即會(huì)彈出如下的錯(cuò)誤:

EasyJWeb框架友情提示

您對(duì)頁面的刷新太快,請(qǐng)等待60秒后再刷新頁面!

詳細(xì)請(qǐng)查詢http://www.easyjf.com

二、用戶訪問信息記錄UserConnect.java類

這個(gè)類是一個(gè)簡(jiǎn)單的Java Bean,主要代表用戶的信息,包括用戶名、IP、第一次訪問時(shí)間、最后登錄時(shí)間、登錄次數(shù)、用戶狀態(tài)等。全部

代碼如下:

package com.easyjf.web;

import java.util.Date;

/**

*

*

Title:用戶驗(yàn)證信息

*

Description:記錄用戶登錄信息,判斷用戶登錄情況

*

Copyright: Copyright (c) 2006

*

Company: www.easyjf.com

* @author 蔡世友

* @version 1.0

*/

public class UserConnect {

private String userName;

private String ip;

private Date firstFailureTime;

private Date lastLoginTime;

private int failureTimes;//用戶登錄失敗次數(shù)

private int status=0;//用戶狀態(tài)0表示正常,-1表示鎖定

public int getFailureTimes() {

return failureTimes;

}

public void setFailureTimes(int failureTimes) {

this.failureTimes = failureTimes;

}

public Date getFirstFailureTime() {

return firstFailureTime;

}

public void setFirstFailureTime(Date firstFailureTime) {

this.firstFailureTime = firstFailureTime;

}

public String getIp() {

return ip;

}

public void setIp(String ip) {

this.ip = ip;

}

public Date getLastLoginTime() {

return lastLoginTime;

}

public void setLastLoginTime(Date lastLoginTime) {

this.lastLoginTime = lastLoginTime;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public int getStatus() {

return status;

}

public void setStatus(int status) {

this.status = status;

}

}

三、監(jiān)控線程UserConnectManage.java類

這是入侵檢測(cè)的核心部分,主要實(shí)現(xiàn)具體的入侵檢測(cè)、記錄、判斷用戶信息、在線用戶的刷新等功能,并提供其它應(yīng)用程序使用本組件的調(diào)用接口。

package com.easyjf.web;

import java.util.Date;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import org.apache.log4j.Logger;

/**

*

*

Title:用戶入侵檢測(cè)信息

*

Description:用于判斷用戶刷新情況檢查,默認(rèn)為10秒鐘之內(nèi)連續(xù)連接10次為超時(shí)

*

Copyright: Copyright (c) 2006

*

Company: www.easyjf.com

* @author 蔡世友

* @version 1.0

*/

public class UserConnectManage {

private static final Logger logger = (Logger) Logger.getLogger(UserConnectManage.class.getName());

private static int maxFailureTimes=10;//最大登錄失敗次數(shù)

private static long maxFailureInterval=10000;//毫秒,達(dá)到最大登錄次數(shù)且在這個(gè)時(shí)間范圍內(nèi)

private static long waitInterval=60000;//失敗后接受連接的等待時(shí)間,默認(rèn)1分鐘

private static int maxOnlineUser=200;//同時(shí)在線的最大數(shù)

private final static Map users=new HashMap();//使用ip+userName為key存放用戶登錄信息UserLoginAuth

private static Thread checkThread=null;

private static class CheckTimeOut implements Runnable{

private Thread parentThread;

public CheckTimeOut(Thread parentThread)

{

this.parentThread=parentThread;

synchronized(this){

if(checkThread==null){

checkThread= new Thread(this);

//System.out.println("創(chuàng)建一個(gè)新線程!");

checkThread.start();

}

}

}

public void run() {

while(true)

{

if(parentThread.isAlive()){

try{

Thread.sleep(2000);

int i=0;

if(users.size()>maxOnlineUser)//當(dāng)達(dá)到最大用戶數(shù)時(shí)清除

{

synchronized(users){//執(zhí)行刪除操作

Iterator it=users.keySet().iterator();

Set set=new HashSet();

Date now=new Date();

while(it.hasNext())

{

Object key=it.next();

UserConnect user=(UserConnect)users.get(key);

if(now.getTime()-user.getFirstFailureTime().getTime()>maxFailureInterval)//刪除超時(shí)的用戶

{

set.add(key);

logger.info("刪除了一個(gè)超時(shí)的連接"+i);

i++;

}

}

if(i<5)//如果刪除少于5個(gè),則強(qiáng)行刪除1/2在線記錄,犧牲性能的情況下保證內(nèi)存

{

int num=maxOnlineUser/2;

it=users.keySet().iterator();

while(it.hasNext() && i {

set.add(it.next());

logger.info("刪除了一個(gè)多余的連接"+i);

i++;

}

}

users.keySet().removeAll(set);

}

}

}

catch(Exception e)

{

e.printStackTrace();

}

}

else

{

break;

}

}

logger.info("監(jiān)視程序運(yùn)行結(jié)束!");

}

}

//通過checkLoginValidate判斷是否合法的登錄連接,如果合法則繼續(xù),非法則執(zhí)行

public static boolean checkLoginValidate(String ip,String userName)//只檢查認(rèn)證失敗次數(shù)

{

boolean ret=true;

Date now=new Date();

String key=ip+":"+userName;

UserConnect auth=(UserConnect)users.get(key);

if(auth==null)//把用戶當(dāng)前的訪問信息加入到users容器中

{

auth=new UserConnect();

auth.setIp(ip);

auth.setUserName(userName);

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

users.put(key,auth);

if(checkThread==null)new CheckTimeOut(Thread.currentThread());

}

else

{

if(auth.getFailureTimes()>maxFailureTimes)

{

//如果在限定的時(shí)間間隔內(nèi),則返回拒絕用戶連接的信息

if((now.getTime()-auth.getFirstFailureTime().getTime()) {

ret=false;

auth.setStatus(-1);

}

else if(auth.getStatus()==-1 && (now.getTime()-auth.getFirstFailureTime().getTime()<(maxFailureInterval+waitInterval)))//重置計(jì)數(shù)器

{

ret=false;

}

else

{

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

auth.setStatus(0);

}

}

//登錄次數(shù)加1

auth.setFailureTimes(auth.getFailureTimes()+1);

}

//System.out.println(key+":"+auth.getFailureTimes()+":"+ret+":"+(now.getTime()-auth.getFirstFailureTime().getTime()));

return ret;

}

public static void reset(String ip,String userName)//重置用戶信息

{

Date now=new Date();

String key=ip+":"+userName;

UserConnect auth=(UserConnect)users.get(key);

if(auth==null)//把用戶當(dāng)前的訪問信息加入到users容器中

{

auth=new UserConnect();

auth.setIp(ip);

auth.setUserName(userName);

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

users.put(key,auth);

}

else

{

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

}

}

public static void remove(String ip,String userName)//刪除用戶在容器中的記錄

{

String key=ip+":"+userName;

users.remove(key);

}

public static void clear()//清空容器中內(nèi)容

{

if(!users.isEmpty())users.clear();

}

public static long getMaxFailureInterval() {

return maxFailureInterval;

}

public static void setMaxFailureInterval(long maxFailureInterval) {

UserConnectManage.maxFailureInterval = maxFailureInterval;

}

public static int getMaxFailureTimes() {

return maxFailureTimes;

}

public static void setMaxFailureTimes(int maxFailureTimes) {

UserConnectManage.maxFailureTimes = maxFailureTimes;

}

public static int getMaxOnlineUser() {

return maxOnlineUser;

}

public static void setMaxOnlineUser(int maxOnlineUser) {

UserConnectManage.maxOnlineUser = maxOnlineUser;

}

public static long getWaitInterval() {

return waitInterval;

}

public static void setWaitInterval(long waitInterval) {

UserConnectManage.waitInterval = waitInterval;

}

四、調(diào)用接口

在需要進(jìn)入侵檢測(cè)判斷的地方,直接使用UserConnectManage類中的checkLoginValidate方法即可。如EasyJWeb的核心Servlet 

com.easyjf.web.ActionServlet中調(diào)用UserConnectManage的代碼:

if(!UserConnectManage.checkLoginValidate(request.getRemoteAddr(),"guest"))

{

info(request,response,new Exception("您對(duì)頁面的刷新太快,請(qǐng)等待"+UserConnectManage.getWaitInterval()/1000+"秒

后再刷新頁面!"));

return;

}

五、總結(jié)

當(dāng)然,這里提供的方法只是一個(gè)Java Web開發(fā)中的簡(jiǎn)單實(shí)現(xiàn)示例,由于上面的用戶信息是直接保存在內(nèi)存中,若并發(fā)用戶很大的時(shí)候的代碼的占用,可以考慮引入數(shù)據(jù)庫(kù)來記錄用戶的訪問信息,當(dāng)然相應(yīng)的執(zhí)行效率肯定用降低。上面介紹的入侵檢測(cè)的實(shí)現(xiàn)中,入侵檢測(cè)判斷的策略也只有用戶訪問次數(shù)及時(shí)間間隔兩個(gè)元素,您還可以根據(jù)你的實(shí)現(xiàn)情況增加其它的檢測(cè)元素。

【編輯推薦】

  1. Red Hat CEO呼吁甲骨文繼續(xù)保持Java開放
  2. 自學(xué)Javabean迅速成為Java高手
  3. Java通過JNI調(diào)用C語言的方法
  4. 高手Java核心技術(shù)學(xué)習(xí)筆記
  5. 成為Java高手需要注意的25個(gè)學(xué)習(xí)目標(biāo)
責(zé)任編輯:王觀 來源: 賽迪網(wǎng)
相關(guān)推薦

2011-03-04 13:17:51

2009-03-23 10:04:46

Java Web入侵檢Java Web應(yīng)用EasyJWeb

2009-09-04 10:21:00

2009-07-09 16:47:26

Servlet的Web

2022-05-10 11:23:56

漏洞補(bǔ)洞過程入侵檢測(cè)

2009-01-16 14:08:42

PHP開發(fā)Web應(yīng)用執(zhí)行效率

2011-12-29 15:35:39

Web

2019-05-17 09:20:01

2010-08-26 10:12:54

2009-12-17 17:31:10

2009-07-08 15:31:40

JDK 6.0web service

2011-12-30 16:30:39

Java

2010-08-30 09:50:34

2011-08-12 11:36:07

2009-03-03 13:51:15

2011-04-06 13:39:18

2012-07-09 10:21:30

2010-10-25 11:59:19

2010-05-26 16:13:54

入侵檢測(cè)系統(tǒng)部署IDS

2009-07-22 11:11:39

iBATIS分頁實(shí)例ObjectDataS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

麻豆专区一区二区三区四区五区| 青青草原一区二区| 2020欧美日韩在线视频| 久久综合福利| 999精品网站| av在线资源站| 精品女同一区二区三区在线观看| 日韩一区亚洲二区| 国产一区二区三区国产| 亚洲国产一区二区a毛片| 日韩精品高清在线| 国产精品羞羞答答| 91精品国产毛片武则天| 轻轻色免费在线视频| videos性欧美另类高清| 精品少妇av| 国产成人精品免费网站| 色婷婷久久久亚洲一区二区三区 | 久久久91精品| 国产欧美亚洲日本| 亚洲一二三区av| 欧美人与牲禽动交com| 欧美色图一区| 99re亚洲国产精品| 日韩欧美综合在线| 国产精品亚发布| 成人综合视频在线| 特级毛片在线| 久久资源中文字幕| 久久久久久97三级| 亚洲国产日韩欧美在线99| 91精品视频在线免费观看| 欧在线一二三四区| 精品极品在线| 亚洲一级黄色| 亚洲精品日韩专区silk| 国产亚洲视频在线| 精品不卡一区二区三区| 久草福利资源在线视频| 国产亚洲精品精品国产亚洲综合| 免费亚洲网站| 亚洲国产精品精华液网站| 上原亚衣av一区二区三区| 免费在线观看一区二区| 一二三区高清| 日韩中文字幕在线一区| 老司机精品视频导航| 色中色一区二区| 欧美在线不卡区| 免费看国产曰批40分钟| 青青青草视频在线| 亚洲人体av| 亚洲三级电影网站| 久久在线精品视频| 韩国黄色一级大片| 天天在线视频色| 99久久综合| 亚洲欧美综合另类在线卡通| 久久精品国产欧美亚洲人人爽| 亚洲综合av一区| 日本高清中文字幕在线| 日韩在线精品| 亚洲免费观看在线视频| 综合国产在线视频| 一区二区三区|亚洲午夜| 日本高清中文字幕在线| 亚洲精品国产首次亮相| 亚洲视频在线一区| 欧美高清性猛交| 2018国产在线| 天堂√中文最新版在线| 久久伊人一区| 欧美熟乱15p| 国产青草视频在线观看| 亚洲国产一区二区视频| 久操视频在线观看| 日本国产一区二区三区| 成人免费黄色大片| 91cn在线观看| 久久久av水蜜桃| 国产亚洲一区二区三区四区| 国产精品久久久久影视| 伊人伊成久久人综合网小说| 青青草原亚洲| 超碰国产在线| 亚洲成av人片乱码色午夜| 国产精品久久久久久久久免费相片| 国产视频精品va久久久久久| 国产欧美在线一区二区| 免费三级欧美电影| 精品国产导航| 蜜臀91精品国产高清在线观看| 精品无人区一区二区三区| 国产精品免费视频网站| 亚洲一区欧美二区| 大伊人狠狠躁夜夜躁av一区| 国产成人精品一区二区三区| 国产视频1区2区3区| 久久av网站| 91影院在线免费观看| 亚洲精品日韩丝袜精品| 中文字幕99| 国产乱码精品一区二三赶尸艳谈| 日日摸夜夜添夜夜添精品视频| 欧美日韩aaa| 精品一区二区久久久久久久网站| 国产69久久| 精品69视频一区二区三区Q| 91久久国产最好的精华液| 91免费看国产| 欧美视频综合| 欧美一区二区三区另类| 狠狠色狠色综合曰曰| 91精品免费视频| 日韩在线免费看| 欧美先锋影音| 欧美日韩三级一区| 国产原创精品| 久久77777| 日韩av中文字幕一区二区三区| 欧美日韩成人综合| 久久久久久久久久久久久久一区| 欧美午夜电影一区二区三区| 奶水喷射视频一区| 精品久久国产老人久久综合| 一道精品一区二区三区| 国产精品伦理| 不卡一区二区在线| 久久九九精品99国产精品| 免费无码av片在线观看| 在这里有精品| 亚洲欧洲制服丝袜| 国产精品日韩专区| 欧美高清成人| 美女精品在线| 亚洲精品黄网在线观看| 亚洲国产一二三精品无码| 日韩一级特黄| 国产精品视频线看| 国产精品久久久久久久久| 视频福利在线| 亚洲综合三区| 国产午夜精品久久久| 亚洲熟妇av日韩熟妇在线| 日韩欧美激情电影| 伊人一区二区三区| 5g国产欧美日韩视频| 国产原创视频在线观看| 国模无码大尺度一区二区三区| 日韩综合中文字幕| 成人女人a毛片在线看| 日韩黄色大片| 欧美精品久久一区| 小泽玛利亚av在线| 伊人久久亚洲| 午夜在线电影亚洲一区| 精品999在线观看| 亚洲欧洲高清| 欧美国产激情一区二区三区蜜月| 国产精品久久久久久久美男| a√资源在线| 国产一区二区在线观看视频| 久久99热精品这里久久精品| 校园春色影音先锋| 亚洲精品123区| 亚洲精品国产免费| 日本三级免费观看| jlzzjlzz亚洲女人| 欧美日韩国产系列| 久久综合亚洲精品| 欧美变态网站| 欧美日本一道本| 中文字幕一区二区三区5566| 麻豆精品一区| 欧美日韩亚洲高清| 一区二区三区四区| 国产精品一级在线观看| 午夜精品久久久久影视| 欧美视频观看一区| 中文字幕成人| 一区二区三区日韩欧美| 麻豆av一区二区三区| 欧美爱爱视频| 亚洲国产成人va在线观看天堂| 欧美高清视频一区| 天天综合在线观看| 激情成人中文字幕| 中文字幕一区二区三区最新| 超碰成人免费| 欧美另类高清zo欧美| 鲁一鲁一鲁一鲁一色| 久久久影院免费| 亚洲精品国产精品国自产在线 | 亚洲欧美综合精品久久成人| 中文字幕天天干| 欧美日韩1区2区3区| 亚洲视频999| 欧美性猛交p30| 久88久久88久久久| 日韩免费在线免费观看|