Hetty Scope排除规则:从根源解决无关请求干扰问题
你是否正被这些问题困扰?
在Web安全测试过程中,80%的精力往往消耗在筛选有效请求上——浏览器持续加载的广告脚本、前端框架的心跳检测、第三方统计像素……这些与目标功能无关的流量会严重干扰测试效率。Hetty的Scope(作用域)排除规则功能正是为解决这一痛点而生,它能像智能滤网一样精准拦截无关请求,让你专注于真正有价值的测试目标。
读完本文后,你将掌握:
- 基于正则表达式的三层过滤机制(URL/Header/Body)
- 5类高频场景的排除规则模板
- 可视化规则管理界面的高效操作技巧
- 规则优先级与冲突解决策略
- 性能优化指南(避免90%的规则误匹配)
Scope排除规则核心原理
什么是Scope排除规则?
Scope(作用域)排除规则是Hetty实现请求过滤的核心机制,通过预定义的匹配条件,决定哪些HTTP请求应该被代理忽略。它采用"匹配即排除"的工作模式,当请求满足任何一条排除规则时,将不会被记录或拦截。
// 核心数据结构定义(pkg/scope/scope.go)
type Rule struct {
URL *regexp.Regexp // URL正则匹配
Header Header // 请求头匹配规则
Body *regexp.Regexp // 请求体正则匹配
}
type Header struct {
Key *regexp.Regexp // 头部键名正则
Value *regexp.Regexp // 头部值正则
}
请求过滤决策流程
关键特性:
- 规则采用"短路评估":只要匹配一条规则即排除
- 支持全量请求属性匹配:URL/方法/头信息/请求体
- 基于Go标准正则引擎:支持RE2语法,避免灾难性回溯
规则语法完全指南
基础语法规则
| 匹配维度 | 语法类型 | 匹配逻辑 | 示例表达式 |
|---|---|---|---|
| URL | 正则表达式 | 完整URL字符串匹配 | ^https?://(www\.)?example\.com |
| Header.Key | 正则表达式 | 不区分大小写匹配 | User-Agent |
| Header.Value | 正则表达式 | 完全匹配值内容 | Chrome/9[0-9]\. |
| Body | 正则表达式 | 匹配请求体任意位置 | password=.* |
注意:所有正则表达式默认开启"点匹配换行符"模式,即
.可匹配包括换行在内的任意字符
特殊匹配模式
-
精确匹配:使用
^和$锚定首尾^POST$ // 精确匹配POST方法 ^/api/v1/users$ // 精确匹配路径 -
部分匹配:省略锚定符
.js$ // 匹配所有JS文件 sessionid= // 匹配包含会话ID的URL -
否定匹配:使用
(?!pattern)负向预查^(?!.*\.css).*$ // 排除所有CSS文件
可视化规则管理界面
添加排除规则
Hetty提供直观的规则管理界面,通过以下步骤添加排除规则:
- 导航至Scope页面(左侧菜单栏)
- 点击Add Rule按钮打开规则创建表单
- 选择规则类型(当前仅支持URL规则)
- 输入正则表达式
- 点击Add rule提交
// 前端添加规则核心代码(admin/src/features/scope/components/AddRule.tsx)
const [setScope] = useSetScopeMutation({
onCompleted({ setScope }) {
client.writeQuery({
query: ScopeDocument,
data: { scope: setScope },
});
},
});
// 规则提交逻辑
const handleSubmit = (e) => {
e.preventDefault();
setScope({
variables: {
scope: [...existingRules, { url: expression }],
},
});
};
规则管理操作
| 操作 | 界面元素 | 快捷键 | 说明 |
|---|---|---|---|
| 查看规则 | 规则列表 | - | 显示所有已添加的排除规则 |
| 编辑规则 | 规则项右键菜单 | - | 仅支持重新输入正则表达式 |
| 删除规则 | 规则项右侧删除图标 | Delete | 点击后立即删除,无确认提示 |
| 批量操作 | 暂无 | - | 目前不支持批量导入/导出 |
界面提示:当规则输入框获得焦点时,底部会显示最近使用的5条规则历史记录
实战场景规则模板
1. 静态资源排除
# 排除所有图片资源
\.(png|jpg|jpeg|gif|ico|svg)$
# 排除CSS/JS资源
\.(css|js|map|json)$
# 排除字体文件
\.(woff|woff2|ttf|eot)$
2. 第三方服务排除
# 排除Google Analytics
^https?://www\.google-analytics\.com
# 排除百度统计
^https?://hm\.baidu\.com
# 排除所有广告域名
^https?://(.*\.)?(doubleclick\.net|adroll\.com|ads\.twitter\.com)
3. 特定请求方法排除
# 排除OPTIONS预检请求
^OPTIONS$
# 排除HEAD方法请求
^HEAD$
4. API路径排除
# 排除健康检查接口
^/api/healthcheck$
# 排除监控指标接口
^/metrics$
# 排除日志上报接口
^/api/v1/logs
5. 认证相关排除
# 排除登录请求(避免反复拦截登录)
^/login$
# 排除Token刷新请求
^/api/v1/auth/refresh$
高级应用技巧
规则优先级策略
虽然Hetty规则匹配采用"短路逻辑",但合理的规则排序仍能提高匹配效率:
- 高频规则前置:将匹配频率高的规则放在前面
- 精确规则前置:比模糊规则更早匹配,减少回溯
- 复杂规则后置:资源密集型的复杂正则表达式放在最后
性能优化建议
-
限制Body规则数量:Body匹配需要读取完整请求体,建议不超过3条
-
简化正则表达式:
- 避免过度回溯(如
(.*)*) - 使用非捕获组
(?:pattern)代替捕获组(pattern) - 优先使用字符类
[a-z]而非通配符.
- 避免过度回溯(如
-
规则测试工具:在添加复杂规则前,使用在线正则测试工具验证:
与拦截功能协同使用
Scope排除规则与请求拦截功能配合使用可实现更精细的流量控制:
- 在Settings页面启用请求拦截
- 配置拦截过滤器只针对特定路径:
url =~ "/api/v1" AND method = "POST" - 添加Scope排除规则过滤已知安全的API:
^/api/v1/users/self$
这种组合可确保只拦截真正需要关注的请求。
常见问题与解决方案
规则不生效
排查步骤:
- 检查正则表达式是否正确(可使用在线工具验证)
- 确认规则类型与目标匹配维度是否一致
- 查看Hetty日志是否有正则解析错误:
hetty --verbose | grep "scope rule"
常见原因:
- 特殊字符未转义(如
.需写作\.) - 锚点使用不当(如
example.com会匹配aexample.com) - 规则类型错误(如用URL规则匹配请求方法)
误排除问题
解决方案:
-
使用更精确的正则表达式:
# 错误:会排除包含"admin"的所有URL admin # 正确:仅排除以"admin"开头的路径 ^/admin -
添加上下文约束:
# 排除JSON格式的日志请求 ^/logs AND Content-Type: application/json -
使用负向预查排除特殊情况:
^/api(?!/public).*$ # 排除/api下非/public路径
性能下降
当代理出现明显延迟时,可能是由于:
-
过度复杂的正则表达式:
- 避免嵌套量词(如
(a+)+) - 限制重复次数(如
{1,10}而非+)
- 避免嵌套量词(如
-
过多Body规则:
- 将Body规则数量控制在3条以内
- 对大文件使用长度限制预判
规则迁移与备份
由于Hetty目前不提供规则导出功能,可通过以下方式备份Scope规则:
-
使用浏览器开发者工具:
- 打开Network面板
- 过滤
graphql请求 - 找到
setScopemutation请求 - 复制请求体中的
scope数组
-
手动记录重要规则到文本文件,格式建议:
# 排除静态资源 \.(png|jpg|css|js)$ # 排除第三方分析 ^https?://www\.google-analytics\.com
总结与最佳实践
Scope排除规则是Hetty提升测试效率的核心功能,通过合理配置,可将无关请求过滤率提升80%以上。最佳实践总结:
-
规则设计原则:
- 单一职责:一条规则只排除一类请求
- 最小权限:规则尽可能精确
- 可维护性:添加注释说明规则用途
-
规则组合策略:
- 先排除静态资源
- 再排除第三方服务
- 最后排除特定API路径
-
定期审计:
- 每周审查规则有效性
- 移除不再需要的规则
- 合并重复或相似规则
通过本文介绍的Scope排除规则功能,你可以彻底告别无关请求的干扰,将宝贵的测试精力集中在真正需要关注的目标上。立即体验Hetty的强大过滤能力,提升你的Web安全测试效率!
下期预告:Hetty高级拦截技巧——如何利用断点和修改功能进行渗透测试
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



