NodeJS后端,用express实现Web防扫描(网站防扫描)

ops/2024/12/14 8:32:47/

NodeJS后端,用express实现的Web服务器,通过记录访问频率和行为模式,识别潜在的恶意活动,从而实现Web服务器防扫描功能。


代码:

const express = require('express');
const app = express();// 用于存储IP地址及其请求历史
const ipHistory = {};// 防目录扫描中间件
function preventDirectoryScanning(req, res, next) {const ip = req.ip || req.connection.remoteAddress;// 初始化该IP的历史记录if (!ipHistory[ip]) {ipHistory[ip] = {requests: [],lastRequestTime: Date.now(),blockedUntil: 0,};}const history = ipHistory[ip];// 如果当前时间还在封禁时间内,则直接返回403if (Date.now() < history.blockedUntil) {console.log(`Blocked request from ${ip}: ${req.url}`);return res.status(403).send('Forbidden');}// 清除过期的请求记录history.requests = history.requests.filter(request => Date.now() - request.time < 60 * 1000); // 保留最近一分钟内的请求// 添加新的请求记录history.requests.push({time: Date.now(),url: req.url,});// 检查是否有大量对不存在资源的请求const recentRequestsCount = history.requests.length;const uniqueUrls = new Set(history.requests.map(r => r.url));const uniqueUrlCount = uniqueUrls.size;// 如果在短时间内有大量不同的URL请求,则可能是扫描行为if (recentRequestsCount > 20 && uniqueUrlCount / recentRequestsCount > 0.8) {// 封禁该IP一段时间history.blockedUntil = Date.now() + 5 * 60 * 1000; // 5分钟console.log(`Detected suspicious scanning activity from ${ip}. Blocking for 5 minutes.`);return res.status(403).send('Forbidden');}next();  // 继续处理请求
}// 使用中间件
app.use(preventDirectoryScanning);// 定义路由
app.get('/', (req, res) => {res.send('Hello World!');
});// 启动Web服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});

代码说明:

ipHistory用于存储每个IP地址的请求历史。
中间件preventDirectoryScanning会检查来自特定IP的所有请求,并记录它们。
如果某个IP在短时间内尝试访问多个不同的URL(这里定义为超过20个不同URL),并且这些URL大多是不存在的资源(假设大部分请求都是404错误),那么这个IP将被暂时封禁5分钟。
这样就实现了Web服务器防扫描功能。

原文地址:NodeJS后端,用express实现的Web服务器,实现防扫描功能 - web防扫描


http://www.ppmy.cn/ops/141764.html

相关文章

Spring Boot 实战:构建一个社交平台 API

在这篇博客中&#xff0c;我们将继续深入 Spring Boot 的开发实践&#xff0c;通过构建一个简单的社交平台 API&#xff0c;帮助大家理解如何使用 Spring Boot 高效地开发一个具有注册、登录、个人资料管理、帖子发布与评论、点赞等功能的社交平台。在开发过程中&#xff0c;我…

C语言程序设计P6-1【应用指针进行程序设计 | 第一节】——知识要点:指针的概念、定义和运算、指针变量作函数的参数

知识要点&#xff1a;指针的概念、定义和运算、指针变量作函数的参数 视频&#xff1a; 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 输入两个整数&#xff0c;按大小顺序输出&#xff0c;要求用函数处理&#xff0c;而且用指针类型的数据作函数参数…

怎样把音频中某个乐器分离?分离乐器音轨技术

在音乐的浩瀚宇宙中&#xff0c;每一种乐器都承载着独特的音色与情感&#xff0c;它们交织在一起&#xff0c;共同编织出动人的旋律。然而&#xff0c;有时候&#xff0c;我们可能希望从一首复杂的音乐作品中单独聆听某个乐器的演奏&#xff0c;以更深入地理解其旋律线条、和声…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展&#xff0c;有力推动了社会的数智化转型&#xff1b;与此同时&#xff0c;带来的相关安全风险也日益凸显。近日&#xff0c;在北京市举办的通明湖人工智能开发与应用大会上&#xff0c;360智脑总裁张向征以“大模型安全研究与实践”为主题&…

基于用户多元需求视角下 AI 智能名片 O2O 商城小程序的价值与发展策略

摘要&#xff1a;本文深入剖析在当今用户需求多元化的背景下&#xff0c;从显性与隐性需求层面探讨各类产品的发展趋势。以海飞丝等产品为例阐述传统产品功能与新兴多元需求的演变&#xff0c;进而引入 AI 智能名片 O2O 商城小程序&#xff0c;详细分析其如何契合用户多维度需求…

基于python的Selenium webdriver环境搭建(笔记)

一、PyCharm安装配置Selenium环境 本文使用环境&#xff1a;windows11、Python 3.8.1、PyCharm 2019.3.3、Selenium 3.141.0 测试开发环境搭建综述 安装python和pycharm安装浏览器安装selenium安装浏览器驱动测试环境是否正确 这里我们直接从第三步开始 1.1 Seleium安装 …

w~深度学习~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12663254 #Motion Plan 代码 github.com/liangwq/robot_motion_planing 轨迹约束中的软硬约束 前面的几篇文章已经介绍了&#xff0c;轨迹约束的本质就是在做带约束的轨迹拟合。输入就是waypoint点list&#xff0c;约束…

PLC6-CODESYS 的库问题:更改库版本

目录 【一】在安装SP8时NBS 3.5.8.0 依赖的TCP 3.5.8.10不能下载导致程序报错。 【二】移植codesys程序时通常会有库缺失&#xff0c;需要在库管理器选项卡中电机下载缺失的库&#xff0c;也可在报错信息处右键更新占位符 【三】低版本软件添加库需要点击添加库--高级--然后…