Hetty Scope高级规则:正则表达式过滤实战指南
引言:为何默认过滤规则总是不够用?
在Web安全测试中,你是否经常遇到这些困境:抓包工具捕获海量无关请求、关键API被淹没在日志洪流中、需要精确匹配特定参数的请求却无从下手?Hetty作为专注安全研究的HTTP工具包,其Scope模块提供的正则表达式过滤功能正是解决这些问题的利刃。本文将系统讲解如何构建URL、Header、Body三级正则过滤规则,通过20+实战案例带你掌握从基础匹配到复杂场景的全流程技巧,最终实现"指哪打哪"的精准请求拦截。
核心概念:Hetty Scope规则引擎架构
Scope模块工作原理
Hetty的Scope系统通过Scope结构体管理一组Rule规则,每个请求到达时会依次通过规则链进行匹配:
func (s *Scope) Match(req *http.Request, body []byte) bool {
for _, rule := range s.rules {
if matches := rule.Match(req, body); matches {
return true // 任意规则匹配即命中
}
}
return false
}
Rule规则三维结构
每个规则包含三个可配置维度,形成立体过滤网络:
type Rule struct {
URL *regexp.Regexp // URL路径匹配
Header Header // 请求头匹配(Key+Value)
Body *regexp.Regexp // 请求体匹配
}
type Header struct {
Key *regexp.Regexp // 头字段名匹配
Value *regexp.Regexp // 头字段值匹配
}
匹配优先级:URL → Header → Body,任意维度匹配成功则整条规则生效。
实战指南:正则表达式规则编写详解
1. URL匹配规则(最常用)
基础语法示例
| 场景需求 | 正则表达式 | 匹配效果 |
|---|---|---|
| 精确匹配API路径 | ^/api/v1/users$ | 仅匹配/api/v1/users |
| 包含特定参数的请求 | user_id=\d{6} | 匹配包含6位数字用户ID的请求 |
| 排除静态资源 | ^(?!.*\.(js|css|png)$).* | 排除JS/CSS/PNG文件请求 |
| 多域名匹配 | ^(https?://)(example\.com\|test\.org) | 匹配两个域名的HTTP/HTTPS请求 |
高级技巧:路径参数提取
# 捕获RESTful API中的资源ID(使用分组)
^/api/v2/resources/(\d+)/details$
在Hetty中可通过后续处理提取分组内容,实现动态数据追踪。
2. Header匹配规则
请求头匹配逻辑
Header规则采用"与"逻辑:Key和Value同时匹配才生效。特殊场景下可仅配置Key或Value。
实用配置示例
| 目标场景 | Key正则 | Value正则 | 应用场景 |
|---|---|---|---|
| 认证令牌请求 | ^Authorization$ | ^Bearer\s+[A-Za-z0-9]+$ | 捕获JWT令牌请求 |
| 特定User-Agent | ^User-Agent$ | ^Mozilla/5\.0.*Chrome/ | 仅匹配Chrome浏览器请求 |
| JSON格式响应 | ^Content-Type$ | ^application/json | 筛选JSON响应体 |
代码实现示例
// 创建匹配JSON响应的Header规则
headerRule := Rule{
Header: Header{
Key: regexp.MustCompile(`^Content-Type$`),
Value: regexp.MustCompile(`^application/json`),
},
}
3. Body匹配规则
适用场景
- JSON/XML结构化数据过滤
- 表单参数匹配
- 敏感信息检测(如API密钥、手机号)
常用正则模板
# JSON字段匹配
"user_email":\s*"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"
# JWT令牌检测
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+
# 手机号(中国)匹配
1[3-9]\d{9}
规则组合策略:构建企业级过滤系统
规则优先级设计
Hetty按规则添加顺序依次匹配,建议遵循"精准规则优先"原则:
典型规则集示例(电商系统)
var rules = []Rule{
// 1. 核心交易API(最高优先级)
{URL: regexp.MustCompile(`^/api/checkout/complete$`)},
// 2. 用户认证相关
{
URL: regexp.MustCompile(`^/api/auth/`),
Header: Header{
Key: regexp.MustCompile(`^Authorization$`),
},
},
// 3. 包含敏感数据的响应
{Body: regexp.MustCompile(`"credit_card":\s*"\d{4}-\d{4}-\d{4}-\d{4}"`)},
// 4. 排除健康检查请求
{URL: regexp.MustCompile(`^/health$`)},
}
性能优化建议
- 简化前缀匹配:优先使用
^锚定开头,避免全量扫描 - 限制回溯深度:复杂规则使用非贪婪匹配
.*? - 规则数量控制:生产环境建议不超过20条规则
- Body匹配谨慎使用:大型响应体匹配会显著影响性能
调试与验证:确保规则按预期工作
测试工具
Hetty内置调试模式可输出匹配过程:
hetty --debug scope
常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 规则不生效 | 正则转义错误 | 使用regexp.QuoteMeta()处理特殊字符 |
| 匹配结果过多 | 正则过于宽泛 | 添加^和$锚定边界 |
| 性能下降 | Body规则复杂或数量过多 | 拆分规则,优先URL过滤 |
| Header匹配失败 | Key大小写问题 | 添加(?i)忽略大小写,如(?i)^content-type$ |
规则有效性验证清单
- 所有正则表达式已通过在线工具测试(推荐Regex101)
- 包含正反例测试用例(至少5个)
- 性能测试:1000请求/秒场景下CPU占用率<10%
- 规则文档与代码同步更新
高级技巧:超越基础匹配
负向匹配技巧
排除特定路径的请求:
# 匹配所有/api/请求,但排除/api/logs
^/api/(?!logs).*$
条件组合匹配
匹配"POST请求且包含特定表单字段":
Rule{
URL: regexp.MustCompile(`^/submit-form$`),
Header: Header{
Key: regexp.MustCompile(`^Content-Type$`),
Value: regexp.MustCompile(`^application/x-www-form-urlencoded$`),
},
Body: regexp.MustCompile(`user_role=admin`),
}
动态规则管理
通过Hetty API实时更新规则:
PUT /api/scope/rules
Content-Type: application/json
{
"rules": [
{"url": "^/new-endpoint$"}
]
}
总结与展望
掌握Scope正则表达式过滤规则,能让你的安全测试效率提升80%以上。核心要点:
- 三维匹配:URL路径、Header字段、Body内容协同过滤
- 规则策略:精准优先、数量控制、性能平衡
- 持续优化:定期审计规则有效性,移除冗余配置
Hetty团队计划在v1.2版本中引入规则热重载和AI辅助生成功能,彻底解决复杂场景下的规则编写难题。
实用资源
收藏本文,下次配置Scope规则时直接查阅示例!关注Hetty技术专栏,下期将带来《拦截规则与自动化攻击结合实战》。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



