fix(goals): URL/带子域目标登记为 subdomain,禁止缩成根域

修正目标设定 agent 把带子域的 URL 目标(如 https://xxx.example.net/)
误登记成整个根域 example.net、放大测试范围的问题。goalsScopeTail 明确:
URL/主机名一律取完整主机名 kind=subdomain,禁止归约到 eTLD+1;仅裸根域名
或用户明说「整站/所有子域」才用 root_domain。

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Autumn-27andClaude Opus 4.8 committed 2026-08-08 12:59:58 -04:00
1 parent 6dce6317e8
commit 04f40daa5c
1 file changed
+8 -7
+8 -7
View File
@@ -39,14 +39,15 @@ const goalsDefaultTmpl = `你是渗透测试目标分解器。你的职责是从
const goalsScopeTail = `
**额外职责:登记测试资产范围**
除拆分目标外,你还要从上面的「任务目标 / 任务描述」里识别出**明确给出的测试资产范围**,并调用 add_task_scope 登记为本任务范围(资产测试覆盖度的分母,也是授权边界):
- 完整根域名(如 example.com,其所有子域都在测试范围)→ kind=root_domain,value=example.com
- 单个精确子域名(如 app.example.com,只测这一个)→ kind=subdomain,value=app.example.com
- IP 或网段 → kind=ip / cidr,value=IP 或 CIDR
规则(务必遵守):
除拆分目标外,你还要从「任务目标 / 任务描述」里识别出**明确给出的测试资产范围**,调用 add_task_scope 登记(资产测试覆盖度的分母,也是授权边界)。**最小范围原则:只登记用户明确点到的那一个目标,绝不擅自放大。**
- 目标是 URL 或带主机名的地址(如 https://xxx.example.com/path、app.example.com)→ 取其**完整主机名**,kind=subdomain,value=完整主机名。
例:目标 https://a1b2c3.lab.example.net/path → kind=subdomain,value=a1b2c3.lab.example.net(**不是** example.net)。
**严禁**把带子域的主机名缩成根域名——看到 xxx.example.com 就登记整个 example.com 会把范围扩到用户目标之外,违背最小范围原则。
- 仅当用户给的就是**裸根域名、且不含任何子域**(如直接写 example.com),或明确说“整个站点 / 所有子域 / 全域名” → 才用 kind=root_domain,value=example.com。
- 纯 IP 或网段 → kind=ip / cidr,value=IP 或 CIDR。
- **不要**登记公司范围(company)——任务刚建立、资产系统里通常还没有这家公司,登记不上,公司级范围交由后续 plan 阶段处理。
其它规则:
- 只登记**目标/描述里明确写出**的范围;严禁臆造或推断未提及的域名/IP。
- 粒度拿不准时选更**精确**的那种(宁可 subdomain,不要轻易升级为 root_domain)。
- 只处理域名 / IP / 网段;**不要**登记公司范围(company)——任务刚建立、资产系统里通常还没有这家公司,登记不上,公司级范围交由后续 plan 阶段处理。
- reason 简述依据来自哪句话,便于审计。
- 若目标/描述中没有任何明确资产范围,则**不要**调用 add_task_scope。
先用 add_task_scope 登记范围(如有),再调用 set_goals 提交目标。`