【趣事】用 JavaScript 对抗 DDOS 攻击
【趣事】用 JavaScript 对抗 DDOS 攻击前言从一道面试题说起几年前我参加了一场前端面试面试官突然问我“如果让你用 JavaScript 写一个简单的 DDOS 防御工具你会怎么做”我愣了一下心想DDOS 攻击不是应该用防火墙、负载均衡这些后端工具吗JavaScript 这种运行在浏览器里的“玩具语言”能做什么后来我才发现这个问题其实藏着很多有趣的知识点。JavaScript 虽然不能直接防御服务器端的 DDOS但在客户端、在浏览器端它确实能做出一些巧妙的“反制”措施。今天我就带你从基础到进阶一步步探索这个有趣的话题。## 基础篇什么是 DDOS 攻击DDOSDistributed Denial of Service分布式拒绝服务攻击就像是一群坏蛋同时冲进一家超市把所有的购物车都抢走导致正常顾客无法购物。在互联网世界里攻击者会控制成千上万的“僵尸电脑”肉鸡向目标服务器发送海量请求直到服务器资源耗尽无法响应正常用户的请求。举个简单例子假设你的网站有一个搜索功能每次搜索都要查询数据库。如果攻击者用 10 万个浏览器同时发送搜索请求你的服务器很快就会崩溃。## 第一段代码创建一个简单的请求速率限制器JavaScript 可以在浏览器端实现一个“请求节流器”控制请求发送的频率。虽然这不能阻止攻击但可以保护用户自己不被“误伤”比如某些恶意脚本会频繁发送请求。javascript/** * 请求速率限制器 * 功能在指定时间窗口内限制请求次数 * 参数 * - maxRequests: 最大允许请求数 * - timeWindow: 时间窗口毫秒 */class RateLimiter { constructor(maxRequests 5, timeWindow 1000) { this.maxRequests maxRequests; // 每秒最多5次请求 this.timeWindow timeWindow; this.requestTimestamps []; // 记录每次请求的时间戳 } /** * 检查是否允许发送请求 * returns {boolean} true表示允许false表示拒绝 */ canSendRequest() { const now Date.now(); // 移除超出时间窗口的旧记录 this.requestTimestamps this.requestTimestamps.filter( timestamp now - timestamp this.timeWindow ); // 如果当前窗口内请求数未达上限允许请求 if (this.requestTimestamps.length this.maxRequests) { this.requestTimestamps.push(now); return true; } // 请求过于频繁拒绝 return false; } /** * 获取当前请求频率统计 * returns {object} 包含当前请求数和剩余时间 */ getStats() { const now Date.now(); const validRequests this.requestTimestamps.filter( timestamp now - timestamp this.timeWindow ); return { currentRequests: validRequests.length, maxRequests: this.maxRequests, remainingRequests: this.maxRequests - validRequests.length, timeWindow: this.timeWindow }; }}// 使用示例const limiter new RateLimiter(5, 1000); // 每秒最多5次请求// 模拟连续发送请求for (let i 0; i 10; i) { const allowed limiter.canSendRequest(); console.log(请求 ${i 1}: ${allowed ? ✅ 通过 : ❌ 被限制}); if (!allowed) { console.log(当前状态:, limiter.getStats()); }}这段代码虽然简单但它体现了防御 DDOS 的核心思想控制频率。在实际项目中我们可以将这个速率限制器挂载到 AJAX 请求发送前对用户的请求行为进行实时监控。## 进阶篇客户端验证码与行为分析仅仅限制频率还不够攻击者可能会用更复杂的脚本绕过。这时候就需要引入“行为验证”机制。常见的做法是让用户完成一个简单的任务比如点击按钮、拖拽滑块来证明“我是真人”。javascript/** * 基于行为分析的验证码系统 * 功能检测用户操作是否像“人类行为” * 原理人类点击有随机延迟机器人点击则非常规律 */class HumanVerification { constructor() { this.clickTimestamps []; // 记录点击时间戳 this.clickPositions []; // 记录点击位置 (x, y) this.verificationThreshold 0.7; // 人类行为概率阈值 } /** * 记录一次点击事件 * param {number} x - 点击位置的x坐标 * param {number} y - 点击位置的y坐标 */ recordClick(x, y) { this.clickTimestamps.push(Date.now()); this.clickPositions.push({ x, y }); // 只保留最近10次点击记录 if (this.clickTimestamps.length 10) { this.clickTimestamps.shift(); this.clickPositions.shift(); } } /** * 分析点击行为判断是否是真人 * returns {boolean} true表示像真人false表示像机器人 */ analyzeBehavior() { if (this.clickTimestamps.length 5) { return false; // 数据不足无法判断 } // 计算点击间隔的方差人类点击间隔变化较大 const intervals []; for (let i 1; i this.clickTimestamps.length; i) { intervals.push(this.clickTimestamps[i] - this.clickTimestamps[i-1]); } const mean intervals.reduce((a, b) a b, 0) / intervals.length; const variance intervals.reduce((sum, val) sum Math.pow(val - mean, 2), 0) / intervals.length; // 计算点击位置的变化率人类点击位置不会完全一致 const positions this.clickPositions; let positionVariation 0; for (let i 1; i positions.length; i) { const dx positions[i].x - positions[i-1].x; const dy positions[i].y - positions[i-1].y; positionVariation Math.sqrt(dx * dx dy * dy); } positionVariation / (positions.length - 1); // 结合两个指标计算人类概率 const humanScore (variance 100 ? 0.4 : 0) (positionVariation 20 ? 0.3 : 0); console.log(人类行为评分: ${humanScore.toFixed(2)} (阈值: ${this.verificationThreshold})); return humanScore this.verificationThreshold; } /** * 生成一个简单的验证挑战 * returns {string} 验证任务描述 */ createChallenge() { const challenges [ 请在5秒内点击页面上的红色按钮, 请将滑块拖到最右侧再松开, 请按顺序点击数字1、2、3 ]; return challenges[Math.floor(Math.random() * challenges.length)]; }}// 使用示例const verifier new HumanVerification();// 模拟人类用户点击console.log(模拟人类点击行为...);verifier.recordClick(100, 200);setTimeout(() verifier.recordClick(150, 220), 300);setTimeout(() verifier.recordClick(200, 180), 700);setTimeout(() verifier.recordClick(120, 250), 1200);setTimeout(() verifier.recordClick(180, 210), 1800);setTimeout(() { const isHuman verifier.analyzeBehavior(); console.log(判断结果: ${isHuman ? ✅ 是真人 : ❌ 可能是机器人}); console.log(验证挑战: ${verifier.createChallenge()});}, 2000);这段代码展示了一个有趣的思路通过分析用户的点击间隔和位置变化判断“行为模式”是否像人类。真实的 DDOS 防御系统会结合更多维度的数据比如鼠标移动轨迹、页面滚动速度、甚至键盘输入节奏。## 深入探索Web Workers 与请求分发当攻击请求量巨大时主线程可能会被阻塞。这时候我们可以利用 Web Workers 在后台线程处理请求过滤避免影响页面正常交互。javascript// worker.js - 在后台线程运行的请求过滤逻辑self.onmessage function(event) { const requestData event.data; // 简单的请求验证逻辑 function validateRequest(data) { // 检查请求间隔 const now Date.now(); if (data.lastRequestTime (now - data.lastRequestTime 50)) { return { allowed: false, reason: 请求过于频繁 }; } // 检查请求来源简单的IP伪造检测 if (data.userAgent data.userAgent.includes(bot)) { return { allowed: false, reason: 疑似自动化工具 }; } // 通过验证 return { allowed: true, reason: 正常请求 }; } const result validateRequest(requestData); self.postMessage(result);};// 主线程 - 创建Worker并发送请求const worker new Worker(worker.js);const requestQueue [];function sendFilteredRequest(url, data) { return new Promise((resolve, reject) { worker.onmessage function(event) { const result event.data; if (result.allowed) { // 通过验证实际发送请求 fetch(url, { method: POST, body: JSON.stringify(data), headers: { Content-Type: application/json } }) .then(response resolve(response)) .catch(error reject(error)); } else { reject(new Error(result.reason)); } }; worker.postMessage({ userAgent: navigator.userAgent, lastRequestTime: Date.now(), ...data }); });}// 使用示例async function testWorkerFilter() { try { const response await sendFilteredRequest(/api/data, { key: value }); console.log(请求成功:, response); } catch (error) { console.error(请求被拦截:, error.message); }}## 总结通过这篇文章我们从基础概念出发逐步探索了 JavaScript 在对抗 DDOS 攻击中的有趣应用。从简单的请求速率限制器到基于行为分析的验证码系统再到利用 Web Workers 进行后台过滤每一个技巧都展示了 JavaScript 在客户端安全领域的潜力。当然这些代码只是“趣味性”的尝试真正的 DDOS 防御需要结合后端、网络层、云防护等多层次手段。但通过这个项目我们可以学到-限流思想控制请求频率是防御的第一道防线-行为分析通过数据模式区分人类和机器-异步处理利用浏览器特性优化性能最后提醒一句学习这些技术是为了理解安全原理千万不要用来做坏事。真正的程序员会用技术保护世界而不是破坏它。希望这篇文章能激发你对网络安全和 JavaScript 潜力的更多思考

相关新闻

Java 征途:行者的地图

Java 征途:行者的地图

Java 征途:行者的地图 引言:从字节码到分布式,Java 的进化之路Java,这门诞生于 1995 年的编程语言,早已超越了“语言”的范畴,成为一套完整的生态系统。对于开发者而言,Java 的学习之旅就像一场…

2026/8/7 0:33:27 阅读更多 →
CC1010硬件同步与前置码检测:低功耗无线通信的可靠接收基石

CC1010硬件同步与前置码检测:低功耗无线通信的可靠接收基石

1. 项目概述在嵌入式无线通信的世界里,数据帧的可靠接收往往比发送更具挑战性。想象一下,你站在一个嘈杂的火车站,广播里断断续续地播放着车次信息,你必须从一片杂音中准确捕捉到“开往XX方向的列车即将进站”这句话的开头&#x…

2026/8/7 8:19:56 阅读更多 →
基于SVM与ANN的金属废料智能分拣系统设计与实现

基于SVM与ANN的金属废料智能分拣系统设计与实现

1. 项目背景与核心价值 在金属回收行业中,废弃金属的分类与等级判定一直是个技术难点。传统人工分拣方式效率低下且准确率难以保证,而市场上现有设备往往只能处理单一金属类型。我们团队开发的这套系统,通过结合支持向量机(SVM&am…

2026/8/9 0:04:44 阅读更多 →

最新新闻

告别风扇噪音:用FanControl打造你的静音高性能PC

告别风扇噪音:用FanControl打造你的静音高性能PC

告别风扇噪音:用FanControl打造你的静音高性能PC 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanC…

2026/8/11 13:02:52 阅读更多 →
3分钟掌握res-downloader:全网资源下载神器,轻松获取视频号、抖音、小红书内容

3分钟掌握res-downloader:全网资源下载神器,轻松获取视频号、抖音、小红书内容

3分钟掌握res-downloader:全网资源下载神器,轻松获取视频号、抖音、小红书内容 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending…

2026/8/11 13:02:52 阅读更多 →
Traymond:Windows桌面整理的终极解决方案,一键隐藏窗口到系统托盘

Traymond:Windows桌面整理的终极解决方案,一键隐藏窗口到系统托盘

Traymond:Windows桌面整理的终极解决方案,一键隐藏窗口到系统托盘 【免费下载链接】traymond A simple Windows app for minimizing windows to tray icons 项目地址: https://gitcode.com/gh_mirrors/tr/traymond Traymond是一款专为Windows用户…

2026/8/11 13:02:52 阅读更多 →
8月深度测评:2026年爆火的10款ai写小说工具(附工具使用避坑指南)

8月深度测评:2026年爆火的10款ai写小说工具(附工具使用避坑指南)

很多新手如何开始写小说总是卡在开头,或者写不出黄金前三章。 这几年测试过不下二十款写小说软件,今天把过去所有的测试笔记总结出来,聊聊那些真正能提升效率的ai写小说工具。 我不讲空话,每款工具我都亲手跑过几十万字废稿&…

2026/8/11 13:02:52 阅读更多 →
2025年网盘文件下载的终极解决方案:多平台直链获取工具详解

2025年网盘文件下载的终极解决方案:多平台直链获取工具详解

2025年网盘文件下载的终极解决方案:多平台直链获取工具详解 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

2026/8/11 13:02:52 阅读更多 →
视频转文字原理是什么?实测4款AI工具后的使用总结

视频转文字原理是什么?实测4款AI工具后的使用总结

摘要: 随着短视频、在线课程、企业会议、访谈内容不断增加,如何快速将视频中的语音转换成可编辑文字,成为很多内容创作者和职场用户的刚需。传统人工听写不仅效率低,而且容易遗漏关键信息。本文从视频转文字技术原理出发&#xff…

2026/8/11 13:01:52 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →