Servlet-Filter实现反爬虫

以前用DotNetCore实现过反爬虫功能。在tomcat里面可以利用Servlet的Filter类实现请求的控制来达到反爬虫功能,进而增强JRT的web安全。

实现黑名单过滤器,对在黑名单列表的IP的所有请求都跳转到警告页面,业务各种请求自行定义加入黑名单

/*
本框架版权归属于JRT计划,任何单位或个人未经许可,不得以任何方式复制、传播、展示、发布、分发、重新分发、修改、反编译、
反向编译或以其他方式使用本框架的任何部分,包括但不限于源代码、二进制文件、文档、演示文稿、示例代码和API。
使用本框架的用户需遵守以下条款:
用户只能以个人学习和研究为目的使用本框架,不得将其用于商业用途。
用户在使用本框架时,应遵守所有适用的法律和法规,包括但不限于版权法、商标法、专利法和隐私权法。
用户在使用本框架时,应自行承担风险和责任,并确保不会侵犯任何知识产权或个人权利。
本框架的使用仅限于用户自己使用,不得将其分发给其他用户或将其用于任何形式的共享或传播。
在使用本框架时,用户应尊重和保护其他用户的隐私和个人信息,不得将其泄露给任何第三方。
违反以上条款将视为侵权行为,将采取法律手段维护JRT合法权益。*/
package JRT.Core.Security;import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;/*** 黑名单过滤器,实现拉黑*/
public class BlackListFilter implements Filter {/*** 黑名单*/public static HashMap<String, Long> BlackMap = new HashMap<>();/*** 访问这些url就拉黑*/public static List<String> BlackUrl = new ArrayList<>();/*** 过滤器初始化** @param filterConfig* @throws ServletException*/public void init(FilterConfig filterConfig) throws ServletException {}/*** 执行筛选** @param request  请求对象* @param response 响应对象* @param chain    传递链* @throws IOException* @throws ServletException*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//访问ipString ip = request.getRemoteAddr();HttpServletRequest httpReq = null;if (request instanceof HttpServletRequest) {httpReq = (HttpServletRequest) request;}//请求相对路径String url = httpReq.getRequestURI();if(BlackUrl.size()>0){for(String one:BlackUrl){if(url.contains(one)){//拉黑if(!BlackMap.containsKey(ip)) {BlackMap.put(ip, System.currentTimeMillis());}}}}//被来黑的处理if (BlackMap.containsKey(ip) && httpReq != null) {long starBlackTime = BlackMap.get(ip);long timeCha = (System.currentTimeMillis() - starBlackTime)/1000;// 使用当前时间的毫秒数作为Random的种子Random random = new Random((int) (System.currentTimeMillis() % Integer.MAX_VALUE));// 生成一个介于0(包括)和60(不包括)之间的随机整数int randomInt = random.nextInt(60);//20秒之后再开始拉黑,20-90秒之间随机不响应(随着时间和随机数推移20-90秒之前先大部分失败然后失败量减少,然后再失败增加到全失败)if ((timeCha > 20) && (timeCha + randomInt) > 90) {//判断内外网IPboolean isInnerIP = JRT.Core.Util.IPMacUtil.IsInnerIP(ip);//分钟long miniteCha = timeCha / 60;if (isInnerIP && miniteCha > (60 * 24)) {BlackMap.remove(ip);} else if ((!isInnerIP) && miniteCha > 5) {BlackMap.remove(ip);} else {httpReq = (HttpServletRequest) request;//定向到警告页面if (httpReq.getRequestURI().contains("/error/SecurityWarning.html")) {chain.doFilter(request, response);} else {HttpServletResponse httpResp = null;if (response instanceof HttpServletResponse) {httpResp = (HttpServletResponse) response;}httpResp.sendRedirect("../../error/SecurityWarning.html");}return;}}}chain.doFilter(request, response);}/*** 销毁方法*/public void destroy() {}
}

把实现的Filter类配置到web.xml
在这里插入图片描述

实现警告页面
在这里插入图片描述

效果,被拉黑的IP所有资源请求都定位到警告页面,爬虫行为的识别由业务自己判断
在这里插入图片描述
这样就能对恶意访问进行拦截

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手写一个民用Tomcat (05)

继续我们这次的优化&#xff0c;上次是request&#xff0c; 这次是response&#xff0c;同时request&#xff0c;response 针对 引入门面模式&#xff0c;把负责的逻辑隐藏起来&#xff0c;展示一个 好的好的门面给servlet 。 先看下 response public class JxdResponse imp…

Yolo-world+Python-OpenCV之摄像头视频实时目标检测

上一次介绍了如何使用最基本的 Yolo-word来做检测&#xff0c;现在我们在加opencv来做个实时检测的例子 基本思路 1、读取离线视频流 2、将视频帧给yolo识别 3、根据识别结果 对视频进行绘制边框、加文字之类的 完整代码如下&#xff1a; import datetimefrom ultralytics …

电竞陪玩系统开发平台搭建(小程序,公众号,app)线上线下皆有,线下计算距离。

六大核心功能 1.游戏陪练:可以选择当下火爆的游戏内容&#xff0c;选择游戏大神、职业玩家进行陪练&#xff0c;也可约附近路人玩家或是身边的小伙伴语音组队开黑&#xff0c;一起享受边玩游戏边吐槽的无限乐趣。 2.约玩交友:除了游戏陪玩功能&#xff0c;系统还设置了单独的语…

SpringBlade dict-biz/list SQL 注入漏洞复现

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

Python LEGB规则

Python在查找“名称”时&#xff0c;是按照LEGB规则查找的&#xff1a; Local&#xff1a; 指的就是函数或者类的方法内部 Enclosed&#xff1a; 指的是嵌套函数&#xff08;一个函数包裹另一个函数&#xff0c;闭包&#xff09; Global&#xff1a; 指的是模块中的全局变量 Bu…

含多种需求响应及电动汽车的微网/虚拟电厂日前优化调度

1 主要内容 程序主要建立一个微网/虚拟电厂的日前优化调度模型&#xff0c;以燃气轮机运行成本、购售电费用、电动汽车电池损耗成本以及需求响应费用之和为目标&#xff0c;在日前经济调度模型中&#xff0c;加入了电动汽车模型&#xff0c;考虑了电动汽车出行规律以及充放电规…

python之flask安装以及使用

1 flask介绍 Flask是一个非常小的Python Web框架&#xff0c;被称为微型框架&#xff1b;只提供了一个稳健的核心&#xff0c;其他功能全部是通过扩展实现的&#xff1b;意思就是我们可以根据项目的需要量身定制&#xff0c;也意味着我们需要学习各种扩展库的使用。 2 python…

进程和线程的区别和联系

目录 进程&#xff08;Process&#xff09;&#xff1a; 定义&#xff1a; 创建与销毁&#xff1a; 独立性&#xff1a; 线程&#xff08;Thread&#xff09;&#xff1a; 联系和区别 进程&#xff08;Process&#xff09;&#xff1a; 定义&#xff1a; 进程是程序执行…

【待解决】Could not find encoder for codec_id=27,opencv-python 保存H264格式的错误记录

【待解决】Could not find encoder for codec_id27&#xff0c;opencv-python 保存H264格式的错误记录 代码 cv2.VideoWriter(vide_save_path, cv2.VideoWriter_fourcc(*avc1), fps, (width, height))报错 [ERROR:039.657] global cap_ffmpeg_impl.hpp:3130 open Could not …

超越GPT-4V,苹果多模态大模型上新,神经网络形态加速MLLM(一)

4月8日&#xff0c;苹果发布了其最新的多模态大语言模型&#xff08;MLLM &#xff09;——Ferret-UI&#xff0c;能够更有效地理解和与屏幕信息进行交互&#xff0c;在所有基本UI任务上都超过了GPT-4V&#xff01; 苹果开发的多模态模型Ferret-UI增强了对屏幕的理解和交互&am…

【触想智能】如何选购到一款合适的工业电脑一体机

工业电脑一体机是专为工业环境而设计的一种工业计算机。工业电脑一体机和普通的计算机不一样&#xff0c;它对产品的参数性能要求很高&#xff0c;因为它们通常会运行在高低温、电磁干扰、高粉尘、湿度大的恶劣环境中&#xff0c;所以相应的要求工业电脑一体机必须具备良好的宽…

UE5下载与安装

官方网站&#xff1a;https://www.unrealengine.com/zh-CN 1、下载启动程序安装包。 登录官网后&#xff0c;点击首页右侧下载按钮下载Epic Games启动程序的安装包&#xff0c;如下图&#xff1a; 2、安装启动程序。 双击步骤1所下载安装软件&#xff0c;如下图&#xff1a;…

华为校招机试 - 健康餐(20240410)

题目描述 某减肥食堂,每一份菜都标记了卡路里。 一位顾客,根据营养师的建议,每次饮食都要将卡路里控制在一定区间内(含上下限的值),请问 他有多少种选择? 为了简单起见,每份菜的卡路里用整数表示,且每份菜的卡路里数各不相同; 同一个菜品可以打任意多份。 输入描…

vivado AXI 接口事件

AXI 接口事件 在 Vivado 硬件管理器中 &#xff0c; 如果使用 System ILA IP 对设计 AXI 接口进行调试 &#xff0c; 那么“波形 (Waveform) ”窗口会显示对 应于 System ILA 所探测的接口的接口插槽、事件和信号组。正如下图所示 &#xff0c; “ Waveform ”窗口会显示…

中立分析腾讯云故障相关的事件

最近腾讯云的故障&#xff0c;让一堆云计算爱好者兴奋地远看指点江山、近看沐猴而冠。我比这群爱好者们更了解云计算&#xff0c;但是我尊重我的读者&#xff0c;你们从我这里看到的科普信息&#xff0c;不仅仅只有情绪价值。 在信息爆炸的时代&#xff0c;大家关注和信任某个媒…

探索人工智能:AI如何改变我们的工作和生活

人工智能&#xff08;AI&#xff09;技术的迅猛发展正逐步改变我们的工作方式和生活习惯。从自动化和数据分析到增强决策和个性化服务&#xff0c;AI的应用范围广泛&#xff0c;其潜力巨大。以下是AI如何在各个方面改变我们的工作和生活的一些关键领域&#xff1a; ### 工作领…

三道模拟题

P1003 [NOIP2011 提高组] 铺地毯 题目描述 原题点这里-->P1003 [NOIP2011 提高组] 铺地毯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺…

【Redis 神秘大陆】007 安全监控

七、Redis 安全&监控 当你发现这些内容对你有帮助时&#xff0c;为了支持我的工作&#xff0c;不妨给一个免费的⭐Star&#xff0c;这将是对我最大的鼓励&#xff01;感谢你的陪伴与支持&#xff01;一起在技术的路上共同成长吧&#xff01;点击链接&#xff1a;GitHub | …

【C++】哈希一

这篇博客要说的是哈希算法&#xff0c;哈希又称为散列&#xff0c;它是将存储的值和存储的位置建立起关联关系的一种算法&#xff0c;或者说是一种将任意长度的数据映射为固定长度的输出的算法。 什么意思呢&#xff1f;我们来看一个例子&#xff1a;比如说我们要存储1&#xf…

excel试题转word格式

序号试题选项答案 格式如上。输出后在做些适当调整就可以。 import pandas as pd from docx import Document from docx.shared import Inches# 读取Excel文件 df pd.read_excel(r"你的excel.xlsx")# 创建一个新的Word文档 doc Document()# 添加标题 doc.add_headi…