入侵检测系统的设计与实现——基于正则表达式的 web 入侵检测系统的设计与实现
入侵检测系统(Intrusion Detection System,简称 IDS)是一种能够监视网络或计算机系统活动的安全工具,旨在识别并响应可能的恶意行为或安全事件。这些事件可能包括未经授权的访问、恶意软件、拒绝服务攻击等。入侵检测系统通过不同的技术手段来实现对网络流量、系统日志以及用户行为等的监控和分析,从而及时发现潜在的安全威胁。
入侵检测系统的分类:
- 基于网络的入侵检测系统(Network-based IDS,NIDS):这种 IDS 部署在网络上,监视网络流量以侦测潜在的入侵行为。它们通过分析传输在网络上的数据包来检测异常或恶意的网络活动。
- 基于主机的入侵检测系统(Host-based IDS,HIDS):这种 IDS 安装在主机上,监视主机的日志文件、系统调用、文件系统和注册表等,以侦测主机系统内部的异常行为。
- 混合型入侵检测系统:结合了 NIDS 和 HIDS 的优点,既可以监视网络流量,也可以监视主机的活动,以提高检测的准确性和全面性。
入侵检测系统的工作原理:
- 数据采集: 入侵检测系统的第一步是数据采集。系统通过监视网络流量、日志文件或系统事件来收集数据。常用的数据采集方法包括使用网络嗅探器、日志记录器或安全设备等。采集到的数据将被传输到入侵检测系统进行进一步的分析。
- 流量分析: 采集到的数据需要进行分析,以便识别潜在的入侵行为。流量分析可以通过规则引擎、统计方法或机器学习算法来实现。规则引擎基于预先定义的规则来检测特定的网络活动模式,而机器学习算法则通过训练模型来识别异常行为。
- 入侵检测算法: 入侵检测系统的核心是入侵检测算法。常用的算法包括基于特征的检测、基于异常的检测和混合型检测等。基于特征的检测通过定义特定的特征或规则来识别已知的入侵行为,而基于异常的检测则通过比较当前行为与正常行为的差异来检测异常。混合型检测结合了两种方法的优点,提高了检测的准确性和覆盖范围。
- 警报生成: 当检测到可能的入侵行为时,入侵检测系统将生成警报。警报包括入侵类型、时间戳、受影响的系统或主机等信息。生成的警报将被传递给管理员或安全团队,以便他们采取相应的措施来应对威胁。
- 前端展示: 为了方便用户查看和管理警报信息,入侵检测系统通常提供一个前端展示界面。这个界面可以以图表、表格或日志的形式展示警报信息,并提供查询、过滤和导出等功能,帮助用户更好地理解和应对安全威胁。
一、基于正则表达式的 Web IDS 概述
Web 入侵检测属于 NIDS 的细分场景,专门针对 HTTP/HTTPS 请求进行检测。Web 攻击如 SQL 注入、XSS 跨站脚本、文件上传、目录遍历、命令注入等攻击,都会在请求 URL、GET 参数、POST 请求体、Cookie、请求头中留下固定特征。
正则表达式(Regular Expression)是一种描述字符串匹配模式的语法。基于正则的 Web IDS 属于基于特征(特征码)检测的轻量级 IDS。核心思路:预先编写好各类 Web 攻击特征正则规则,提取 HTTP 请求中的各个字段内容,依次和正则规则进行匹配;一旦匹配成功,判定为攻击行为,触发告警。
优势:开发简单、执行速度快、理解门槛低,适合小型 Web 站点、教学演示项目;
缺陷:只能识别已知攻击特征,无法检测 0day、变形绕过类攻击,容易出现误报、漏报,需要持续维护规则库。
二、系统总体架构设计
本系统采用模块化设计,整体分为五大模块:数据捕获模块、HTTP 解析模块、正则规则引擎模块、告警存储模块、Web 前端展示模块。
- 数据捕获模块
使用抓包库捕获网卡上的网络数据包,过滤 80、443 端口的 HTTP 流量。对于 HTTPS 流量,本项目简化处理,仅针对明文 HTTP 做解析;若需要 HTTPS 检测,可结合中间人代理方式获取请求明文。模块只提取数据包中的 HTTP 原始请求内容,丢弃无关 TCP/UDP 数据包,减少后续计算压力。 - HTTP 解析模块
捕获到的原始网络数据包是二进制流,需要解析 HTTP 协议,拆分出关键检测字段:请求方法、请求 URL、GET 查询参数、POST 请求体、Cookie、User-Agent、Referer。
解析完成后,把所有待检测文本拼接送入规则引擎,这一步是 Web 入侵检测的前置基础。 - 正则规则引擎模块(系统核心)
规则库以配置文件形式保存,每条规则包含:规则 ID、攻击类型、风险等级、正则表达式、描述。
示例规则:
- SQL 注入:
union\s+select - XSS 跨站脚本:
<script.*?> - 目录遍历:
\.\.\/
引擎工作流程:加载全部正则规则 -> 遍历所有待检测字段 -> 循环匹配正则;匹配命中后,停止本次检测,记录攻击信息。
为提升性能,引擎会预先编译正则表达式,避免每次检测重复编译,降低 CPU 开销。
- 告警存储模块
检测命中攻击特征后,将告警信息存入数据库。存储字段包含:告警编号、时间戳、源 IP、目标 IP、请求 URL、攻击类型、风险等级、原始请求内容、命中的规则 ID。数据库选用轻量型 SQLite,无需单独部署,适合项目演示。 - Web 前端展示模块
使用 Web 框架搭建管理页面,实现告警列表分页展示、按攻击类型 / 源 IP / 时间筛选告警、查看原始请求详情、告警日志导出功能。管理员可以在页面直观查看所有 Web 攻击事件。
三、数据库表设计
告警数据表web_alerts设计:
表格
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| id | int (主键自增) | 告警唯一编号 |
| time | datetime | 攻击发生时间戳 |
| src_ip | varchar | 攻击源 IP 地址 |
| dst_ip | varchar | 目标服务器 IP |
| request_url | text | 访问的请求 URL |
| attack_type | varchar | 攻击类型:SQL 注入 / XSS / 目录遍历等 |
| risk_level | varchar | 风险等级:高危 / 中危 / 低危 |
| raw_request | text | HTTP 原始请求报文 |
| rule_id | varchar | 触发的正则规则编号 |
四、核心模块详细设计
4.1 正则规则库设计
规则库使用 JSON 格式存储,方便读取、新增、修改规则,无需修改程序代码。
示例 rules.json 片段:
[ { "rule_id":"R001", "attack_type":"SQL注入", "risk":"高危", "regex":"union\\s+select", "desc":"检测包含union select的SQL注入特征" }, { "rule_id":"R002", "attack_type":"XSS跨站脚本", "risk":"中危", "regex":"<script.*?>", "desc":"检测script标签XSS攻击" }, { "rule_id":"R003", "attack_type":"目录遍历", "risk":"中危", "regex":"\\.\\.\\/", "desc":"检测../目录遍历攻击" } ]规则支持动态加载,修改 JSON 文件后重启系统即可生效。
4.2 正则匹配逻辑设计
程序读取 HTTP 解析模块输出的各个字段,循环调用正则匹配函数。
伪代码逻辑:
加载所有正则规则并预编译 while(持续抓包): 捕获数据包 if 数据包是HTTP流量: http_data = 解析http包,提取url、params、body、cookie for rule in 预编译规则列表: if rule.regex 匹配 http_data中任意字段: 生成告警记录,写入数据库 break为降低误报,增加简单过滤:对静态资源(图片、css、js)请求跳过检测,减少不必要匹配。
4.3 告警处理逻辑
当正则命中攻击特征后,系统只做告警记录,不主动阻断流量(IDS 检测,区别于 WAF)。
补充说明:IDS 只负责发现和报警;如果需要直接拦截攻击,则属于 IPS 入侵防御系统。本项目为 Web IDS,仅检测、记录、上报,不阻断数据包。
五、系统测试与结果分析
5.1 测试环境
- 操作系统:Windows / Linux
- 开发语言:Python
- 抓包库:Scapy
- Web 后端框架:Flask
- 数据库:SQLite
- 测试靶场:DVWA,模拟各类 Web 攻击
5.2 测试用例
- SQL 注入测试:在 DVWA 输入
union select 1,2,系统匹配 R001 规则,生成高危 SQL 注入告警,记录源 IP 与请求报文。 - XSS 测试:输入
<script>alert(1)</script>,命中 R002,生成中危 XSS 告警。 - 目录遍历:请求
../../etc/passwd,命中目录遍历规则。 - 正常访问测试:访问正常页面,无任何攻击特征,系统无告警。
5.3 测试结果分析
- 优点:对于标准、无编码变形的 Web 攻击,检测准确率高,响应速度快;规则配置简单,新增攻击只需要添加一条正则。
- 存在缺陷:
- 攻击载荷经过 URL 编码、大小写变形、注释拆分后,正则容易漏报。例如
UnIoN SeLeCt可以绕过简单正则; - 存在误报:正常业务内容中如果包含匹配正则的文本,会产生误告警;
- 无法识别未知攻击,没有特征的业务逻辑漏洞无法检测。
- 攻击载荷经过 URL 编码、大小写变形、注释拆分后,正则容易漏报。例如
5.4 优化方案
- 正则优化:增加大小写忽略匹配模式,编写更加严谨的正则,减少大小写变形绕过;
- 增加解码预处理:对 URL 参数、POST 数据自动做 URL 解码,还原原始 payload 再进行匹配;
- 误报处理:添加白名单机制,可信 IP、可信路径跳过检测;
- 规则定期更新:持续扩充规则库,收录新的攻击特征。
六、系统不足与展望
本项目实现了一个轻量级、基于正则表达式的 Web 入侵检测系统,完成 HTTP 流量捕获、协议解析、正则特征匹配、告警存储与前端可视化,能够识别常见的 Web 特征类攻击,适合教学研究、小型站点安全监控。
但基于正则特征匹配的检测模式存在天然局限性,只能识别已知攻击特征。后续可以在本系统基础上进行扩展升级:
- 引入异常检测模型,结合机器学习,识别无特征的异常访问行为;
- 增加 HTTPS 流量解析模块,支持 HTTPS 业务检测;
- 增加简单阻断功能,升级为 Web IPS 入侵防御系统;
- 对接日志平台,支持告警推送(邮件、钉钉消息);
- 增加告警统计图表,统计攻击趋势、攻击源 IP 排行,提升安全分析能力。
七、总结
本文设计并实现了一套基于正则表达式的 Web 入侵检测系统。通过抓取网络 HTTP 流量,解析 HTTP 请求各个字段,利用正则表达式作为攻击特征规则,完成 Web 攻击识别、告警存储与可视化展示。
基于正则的特征检测实现难度低、性能好,适合入门级 Web 入侵检测场景。同时本文也分析了该方案的短板:容易被变形载荷绕过、存在误报漏报,只能识别已知攻击。在真实生产环境中,需要结合白名单、流量解码、持续更新规则等方式提升检测效果,也可以和异常检测技术结合,进一步提升入侵检测的覆盖范围。
如何系统学习网络安全?
网络安全作为数字时代的核心技术基石,已成为保障各行业安全稳定运行的坚实屏障。筑牢网络安全的防线,掌握先进的防护策略和技能正上升为国家与企业发展的战略优先级。
构建稳固的网络安全能力是一个体系的工程,需要从夯实基础理论出发,持续深化到攻防对抗与应急响应的实战层面。
如果你是准备学习网络安全(黑客)或者正在学习,我可以把我自用的360独家内部资料分享给你,包含以下内容你应该能用得上:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
一、网络安全(黑客)学习路线
网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网络安全教程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
三、网络安全CTF实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
四、网络安全面试题
最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。
网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】