你的 SecRule 规则真的拦得住攻击吗:ModSecurity-nginx 集成测试实战入门
你的 SecRule 规则真的拦得住攻击吗ModSecurity-nginx 集成测试实战入门【免费下载链接】ModSecurity-nginxModSecurity v3 Nginx Connector项目地址: https://gitcode.com/gh_mirrors/mo/ModSecurity-nginxModSecurity-nginx 是 ModSecurity v3 在 Nginx 上的连接器负责把 libmodsecurity 接进 Nginx 的请求生命周期。要验证一组 SecRule 规则在这个环境里是否按预期拦截攻击靠的是tests/目录下的集成测试——它们用 Perl 和 Test::Nginx 框架拉起一个真实的 Nginx 进程发送真实 HTTP 请求再逐条断言响应。读一遍这套测试比读十页文档更知道规则应该怎么表现。下图是连接器以插件方式接入 Nginx 的架构示意也是这套测试框架最终验证的对象备齐三样东西测试跑道跑测试之前需要凑齐三样测试脚本、Test::Nginx 框架、可用的 Nginx 二进制。测试脚本随仓库提供全部在tests/目录Test::Nginxnginx 官方测试套件中的 Perl 模块cpan Test::Nginx即可安装自编 Nginx必须编译了 ModSecurity-nginx 模块并链接 libmodsecurity原版 Nginx 不认识modsecurity指令。第一次接触的话clone 仓库拿到测试脚本是关键一步git clone https://gitcode.com/gh_mirrors/mo/ModSecurity-nginx把第一个测试跑起来 测试文件不能孤立运行需要放进 nginx-tests 测试套件目录——Test::Nginx 模块和公共配置模板都住在那里。把 ModSecurity 的测试文件复制过去再用prove指定 Nginx 二进制的路径来跑cp tests/*.t /path/to/nginx-tests/ cd /path/to/nginx-tests TEST_NGINX_BINARY/path/to/your/nginx prove .TEST_NGINX_BINARY告诉框架该用哪个 Nginx。两种常见跑法对比跑法命令适用场景单个测试prove modsecurity.t只想确认规则拦截行为全量回归prove .改动连接器代码后提交前拆开一个 .t 文件看它怎么工作每个.t文件结构都一样读懂tests/modsecurity.t就算掌握了全部套路。它分四步声明测试对象my $t Test::Nginx-new()-has(qw/http/);表示本测试依赖 http 模块写 Nginx 配置$t-write_file_expand(nginx.conf, ...)生成临时配置其中%%TEST_GLOBALS%%一类占位符由框架自动填充配置里modsecurity on;加modsecurity_rules两条指令就开启了一套规则准备资源并启动$t-write_file(/phase1, should be blocked...)写入测试用的静态文件$t-run()启动 Nginx发请求、断言例如like(http_get(/phase2?whatblock403), qr/^HTTP.*403/, block 403 - phase 2);这一行发一个请求并断言响应以 403 开头。modsecurity.t用阶段 1~4 × 重定向/拦截组合出 21 条断言验证规则在正确的阶段生效、不多拦也不少拦。顺着套件认识规则验证的场景tests/下有 15 个.t文件文件名基本就是功能地图测试文件验证的内容modsecurity.t核心拦截阶段 1~4 的重定向与拦截行为modsecurity-request-body.t/-h2请求体检查含 HTTP/2 场景modsecurity-response-body.t阶段 4 检查响应体modsecurity-proxy.t/-h2反向代理下的规则行为modsecurity-config-merge.thttp/server/location 多层配置如何合并继承modsecurity-config-auditlog.t、-debuglog.t审计日志、调试日志写到哪里、写了什么modsecurity-scoring.t绝对计分与迭代计分是否数得对modsecurity-transaction-id.t各日志中的事务 ID 是否一致modsecurity-limits.t请求体大小等限制是否生效写你自己的规则验证测试 ✍️掌握上面的套路后加测试就是套模板改断言。最小骨架长这样use Test::More; use Test::Nginx; my $t Test::Nginx-new()-has(qw/http/); $t-write_file_expand(nginx.conf, EOF); %%TEST_GLOBALS%% daemon off; events {} http { %%TEST_GLOBALS_HTTP%% server { listen 127.0.0.1:8080; modsecurity on; modsecurity_rules SecRuleEngine On SecRule ARGS streq attack id:100,phase:2,deny,status:403 ; } } EOF $t-run(); $t-plan(2); like(http_get(/?aattack), qr/^HTTP.*403/, 攻击请求被拦截); like(http_get(/?asafe), qr/200/, 安全请求放行);几个约定值得注意日志路径用%%TESTDIR%%占位符如SecAuditLog %%TESTDIR%%/auditlog-root.txt框架保证每个测试目录互相隔离写完还能直接读日志内容来断言$t-plan(N)的数目必须和断言条数一致对不上测试直接失败需要手工构造原始请求时可以像tests/里的 H2 测试那样用http(EOF)块发送裸请求。用转换脚本跑一遍被动回归除了专用测试项目还提供tests/nginx-tests-cvt.pl这个小转换脚本它把modsecurity on;和一段基础规则自动插进 nginx 官方功能测试的server_name行之后让整个 nginx 功能测试集带着 ModSecurity 模块一起跑验证模块不会改变 Nginx 本身的行为perl tests/nginx-tests-cvt.pl original.t modified.t改过连接器的 C 代码后建议把这类被动回归也跑一轮再提交。测试红了怎么排查失败先别慌测试框架会在/tmp/nginx-test-*留下临时目录答案多半在里面Nginx 没起来看error.log常见原因是TEST_NGINX_BINARY指向了没编译 modsecurity 模块的普通 Nginx规则像没生效把SecDebugLogLevel 9配上调试日志路径再核对日志里有没有该规则 id 的命中记录断言数目或结果不符先核对$t-plan()条数再确认listen端口模板里是 8080没和本地进程冲突。当第一个测试变绿之后剩下的事就是照着套件里的模式一条断言一条断言地往上加。【免费下载链接】ModSecurity-nginxModSecurity v3 Nginx Connector项目地址: https://gitcode.com/gh_mirrors/mo/ModSecurity-nginx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

QtScrcpy 安卓投屏工具实测:免 Root 键鼠控制手机,从 USB 到 Wi-Fi 完整指南

QtScrcpy 安卓投屏工具实测:免 Root 键鼠控制手机,从 USB 到 Wi-Fi 完整指南

QtScrcpy 安卓投屏工具实测:免 Root 键鼠控制手机,从 USB 到 Wi-Fi 完整指南 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 在工位上调试 App,手…

2026/8/23 10:59:26 阅读更多 →
OpenAI 流式响应实战:用 stream=True 和 delta 解析让答案实时输出

OpenAI 流式响应实战:用 stream=True 和 delta 解析让答案实时输出

OpenAI 流式响应实战:用 streamTrue 和 delta 解析让答案实时输出 【免费下载链接】openai-python The official Python library for the OpenAI API 项目地址: https://gitcode.com/GitHub_Trending/op/openai-python 聊天界面里,用户盯着空白屏…

2026/8/23 10:59:26 阅读更多 →
F3D:一条命令打开任意3D文件,从打开到出图只要1分钟

F3D:一条命令打开任意3D文件,从打开到出图只要1分钟

F3D:一条命令打开任意3D文件,从打开到出图只要1分钟 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d 客户发来一个 STEP 零件文件,让你下午前确认形状。打开常用 CAD 软件…

2026/8/23 10:59:26 阅读更多 →

最新新闻

C++可变参数模板类继承:从递归模式到现代Concepts实战

C++可变参数模板类继承:从递归模式到现代Concepts实战

1. 项目概述:可变参数模板类继承的实战价值在C的现代演进中,可变参数模板(Variadic Templates)无疑是一个里程碑式的特性。它从C11引入,并在后续的C17、20乃至23标准中不断得到增强和完善。这个项目标题“C 17/20/23可…

2026/8/23 11:42:37 阅读更多 →
图即策略:基于GNN与MARL的可变自动化任务多智能体自学习框架

图即策略:基于GNN与MARL的可变自动化任务多智能体自学习框架

1. 项目概述:从“图即策略”到智能体自学习的范式跃迁 最近在搞多智能体强化学习(MARL)和自动化流程编排,发现一个挺有意思的架构思路,叫 GaP ,全称是 Graph-as-Policy Multi-Agent Self-Learning Harne…

2026/8/23 11:42:37 阅读更多 →
流式Markdown解析器实现:从状态机到AST增量更新

流式Markdown解析器实现:从状态机到AST增量更新

“流式Markdown解析器怎么实现?”——这可能是前端面试中,区分“会用库”和“懂原理”的一道分水岭。 很多开发者对Markdown的理解停留在“一种轻量级标记语言”,会用 marked 、 markdown-it 等库就满足了。但当面试官抛出“流式解析”时…

2026/8/23 11:42:37 阅读更多 →
从零构建AI智能体:基于LangChain的天气查询与信息检索助手开发实战

从零构建AI智能体:基于LangChain的天气查询与信息检索助手开发实战

在实际 AI 应用开发中,直接调用大模型 API 往往无法满足复杂业务需求。当任务涉及多步骤决策、工具调用或私有知识处理时,一个能够自主规划、执行并利用外部资源的“智能体”就变得至关重要。智能体开发并非简单的 API 封装,它涉及对任务的理…

2026/8/23 11:42:37 阅读更多 →
裸写的User类如何被正确解析?Rubrowser常量命名空间解析算法深度剖析

裸写的User类如何被正确解析?Rubrowser常量命名空间解析算法深度剖析

裸写的User类如何被正确解析?Rubrowser常量命名空间解析算法深度剖析 【免费下载链接】rubrowser a ruby code dependency graph interactive visualizer 项目地址: https://gitcode.com/gh_mirrors/ru/rubrowser Rubrowser 是一款 Ruby 代码依赖图谱可视化器…

2026/8/23 11:42:37 阅读更多 →
如何用Intel SDC编写高性能GroupBy:9种聚合函数并行编译实战(count/mean/std全覆盖)

如何用Intel SDC编写高性能GroupBy:9种聚合函数并行编译实战(count/mean/std全覆盖)

如何用Intel SDC编写高性能GroupBy:9种聚合函数并行编译实战(count/mean/std全覆盖) 【免费下载链接】sdc Numba extension for compiling Pandas data frames, Intel Scalable Dataframe Compiler 项目地址: https://gitcode.com/gh_mirro…

2026/8/23 11:41:37 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/22 7:31:03 阅读更多 →
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/22 3:22:48 阅读更多 →