防止同一IP多次请求攻击

防止入侵者,通过死循环同一时间批量向服务器请求数据,导致服务器内存开销不断膨胀,最后直接瘫痪。

一、 新增一个spring的拦截器 , 拦截所有请求

    <mvc:interceptor>
<!-- 拦截所有请求,判断是否多次请求 -->
<mvc:mapping path="/*/*" />
<bean class="com.boyu.interceptor.RequestManageInterceptor" />
</mvc:interceptor>

拦截器实现 HandlerInterceptor 接口,重写preHandle、postHandle、afterCompletion方法。

在preHandle方法里面

        PrintWriter out = null;//返回给页面显示
Map<String,Object> resultMap = new HashMap<String,Object>();
//取用户的真实IP
String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
ip = request.getHeader(" Proxy-Client-IP ");
}
if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
ip = request.getHeader(" WL-Proxy-Client-IP ");
}
if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
//取session中的IP对象
RequestIp re = (RequestIp) request.getSession().getAttribute(ip);
//第一次请求
if(null == re){
//放入到session中
RequestIp reIp = new RequestIp();
reIp.setCreateTime(System.currentTimeMillis());
reIp.setReCount(1);
request.getSession().setAttribute(ip,reIp);
}else{
Long createTime = re.getCreateTime();
if(null == createTime){
//时间请求为空
resultMap.put("code", 503);
resultMap.put("message", "请求太快,请稍后再试!");
out = response.getWriter();
out.append(ResultUtil.resultMapToString(resultMap));
}else{
if(((System.currentTimeMillis() - createTime)/1000) > 3){
System.out.println("通过请求!"+((System.currentTimeMillis() - createTime)/1000));
//当前时间离上一次请求时间大于3秒,可以直接通过,保存这次的请求
RequestIp reIp = new RequestIp();
reIp.setCreateTime(System.currentTimeMillis());
reIp.setReCount(1);
request.getSession().setAttribute(ip,reIp);
}else{
//小于3秒,并且3秒之内请求了10次,返回提示
if(re.getReCount() > 10){
resultMap.put("code", 503);
resultMap.put("message", "请求太快,请稍后再试!");
out = response.getWriter();
out.append(ResultUtil.resultMapToString(resultMap));//以json形式返回给页面,也可以直接返回提示信息
return false;
}else{
//小于3秒,但请求数小于10次,给对象添加
re.setCreateTime(System.currentTimeMillis());
re.setReCount(re.getReCount()+1);
request.getSession().setAttribute(ip,re);
}
}
}
}

RequestIp.java

private String ip ;
private long createTime;
private Integer reCount;

原文链接:https://blog.csdn.net/mr__su/article/details/51604863

=====================================================================

博客地址:https://www.codepeople.cn

=====================================================================

微信公众号:

防止同一IP多次请求攻击的更多相关文章

  1. nginx利用limit模块设置IP并发防CC攻击

    nginx利用limit模块设置IP并发防CC攻击 分类: 系统2013-01-21 09:02 759人阅读 评论(0) 收藏 举报 来源:http://blog.xencdn.net/nginx- ...

  2. DDOS工具合集---CC 2.0(僵尸网络proxy,单一url,可设置cookie,refer),传奇克星(代理+单一url,可设置cookie),NetBot_Attacker网络僵尸1.0(僵尸网络,HTTP NO-Cache Get攻击模式,CC攻击,HTTP空GET请求攻击),傀儡僵尸VIP1.4版(僵尸网络,动态单一url)、上兴网络僵尸2.3、中国制造网络僵尸、安全基地网络僵尸==

    DDOS工具合集 from:https://blog.csdn.net/chinafe/article/details/74928587 CC 著名的DDOS CC工具,效果非常好!CC 2.0使用了 ...

  3. 获取IP地址 & 伪装IP地址发送请求

    //获取请求客户端IP地址   public final static String getIpAddress(HttpServletRequest request) throws IOExcepti ...

  4. 一个服务器上面配置多个IP ,实现指定IP的域名请求

    //配置多个IP命名using System.Net; //********************************************************************** ...

  5. c#中HttpWebRequest使用Proxy实现指定IP的域名请求

    原文:http://www.cnblogs.com/greenerycn/archive/2010/04/11/httpwebreques_host_modify_By_set_proxy.html ...

  6. IP安全,DDoS攻击、tearDrop攻击和微小IP碎片攻击

    目录 arp安全 IP报文格式 DoS攻击 tear drop攻击 微小碎片攻击 IP欺骗,留后门 arp安全 以太网帧的type =0806 表示arp arp攻击:hack伪造arp应答包给tar ...

  7. CentOS 系统开启防火墙,屏蔽IP,解决DDOS攻击

    刚才发现网站特别慢,然后看了一下服务器状态 CPU 负载100%. 然后看了下网络,发现一个IP一直在请求本服务器的 443 端口,就是本站. 然后在终端通过 iftop 命令(一个流量健康软件,如果 ...

  8. python使用代理ip发送http请求

    一.需求背景 网站刷票时,经常会遇到限制一个ip只能投票一次的限制,为此需要使用代理ip 二.脚本如下: 1.Proxy_http.py使用代理ip发送httpr的get和post请求 #coding ...

  9. IP碎片原理:攻击和防护

    为了加深理解IP协议和一些DoS攻击手段大家有必要看看以下内容,也许对你理解这个概念有所帮助.先来看看IP碎片是如何产生的吧.         一.IP碎片是如何产生的       链路层具有最大传输 ...

随机推荐

  1. Charles弱网测试转载

    一.破解版安装 工具好用是好用,但有个蛋疼的地方,非开源,非开源也就算了,还来个试用30分钟,当时的我就中这招了, 试用了之后发现这工具确实好用,对于测试工程师来说兼抓包定位协议类bug.设置网络阀来 ...

  2. Filter和Listener

    Filter: 1.概念: web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,做一些事. 过滤器的作用:一般用于完成一些通用的操作:登录验证.统一编码处理,敏感字符处理.... 2.快 ...

  3. Haproxy 反向代理

    一.haproxy介绍 HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. 特点如下: .支持两种代理模式:TCP(四层)和H ...

  4. docker端口映射或启动容器时报错Error

    现象: [root@localhost ~]# docker run -d -p 9000:80 centos:httpd /bin/sh -c /usr/local/bin/start.shd5b2 ...

  5. com.alibaba.fastjson.JSONException: exepct '[', but error, pos 1, json : %255B%257B%2522list%2522%253A%255B%257B%2522itemId%2522%253A1369331%252C%2522num%2522%253A2%257D%255D%257D%255

    com.alibaba.fastjson.JSONException: exepct '[', but error, pos 1, json : %255B%257B%2522list%2522%25 ...

  6. 一些坑 Java 执行命令行命令 Spring Boot 打包为jar ResourceUtils.getFile 等出现的问题

    Java 执行命令行命令 这个没技术含量的东西耗费了我半个多小时 String command = ....; Process process = Runtime.getRuntime().exec( ...

  7. 追光的人beta冲刺总结

    所属课程 软件工程1916 作业要求 Beta冲刺博客汇总 团队名称 追光的人 作业目标 beta阶段总结 队员学号 队员博客 221600219 小墨 https://www.cnblogs.com ...

  8. 查看spark on yarn的日志和程序状态的方法

    转自:https://blog.csdn.net/high2011/article/details/52132646 一.在命令行使用命令查看 (1)查看日志:yarn logs -applicati ...

  9. Opencv python图像处理-图像相似度计算

    一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你 ...

  10. Pycharm激活方法使用的是(license server)

    pycharm所有版本 http://www.jetbrains.com/pycharm/download/previous.html打开激活窗口 选择 Activate new license wi ...