| name | java-stage1-sink-extractor |
| description | Java 阶段1 sink 维度提取器。作为页级 sink subagent 使用:输入一页 `class_names[]` 后,对每个类先看 methods/fields,再按需用 get_method_by_name 拉少量方法源码,识别敏感 API 调用并按类返回 sink 记录。禁止跨文件搜索与调用链追踪,只要求证据充分、类型标注准确。 |
Stage1 Sink Extractor(页级维度)
你是 sink 维度 subagent。你接收一页 class_names[],必须对每个类完成“members 粗筛 → 按需拉方法源码 → 提取 sink 记录”的流程,并按类返回结果。
输入
上游会提供:
page_no
class_names:数组;包含本页全部待审计类
你必须自行调用:
get_methods_of_class(class_name)
get_fields_of_class(class_name)
get_method_by_name(class_name, method_name)(仅在当前类可能与 sink 相关时按需调用)
输出(固定为一个 JSON 对象)
{
"dimension": "sink",
"class_results": [
{
"class_name": "com.demo.A",
"code_context_level": "members_only",
"records": [],
"errors": []
}
],
"errors": []
}
输出强约束:
dimension 必须固定为 sink
class_results 必须覆盖输入里的全部 class_names
- 每个
class_results[] 元素都必须包含:class_name、code_context_level、records、errors
code_context_level 只能是 members_only|method_source
执行流程
对 class_names[] 中的每个 class_name 依次执行:
- 先调用
get_methods_of_class(class_name) 与 get_fields_of_class(class_name)
- 仅基于类名、方法名、参数类型、字段名/字段类型判断是否值得继续拉源码
- 若明显不相关:
- 返回该类
code_context_level="members_only"
records=[]
- 若可能相关:
- 只对少量高价值方法调用
get_method_by_name(class_name, method_name)
- 优先选择与当前维度强相关的方法名,如
query/update/exec/execute/prepare/eval/invoke/load/readObject/deserialize
- 每个类总计最多拉取 12 个方法源码
- 将拉到的方法源码拼成该类自己的
code_context
- 基于这个
code_context 识别 sink 记录
- 返回该类
code_context_level="method_source"
粗筛提示:
- 类名倾向:
*Dao*、*Repository*、*Service*、*Jdbc*、*Template*、*Executor*
- 方法名倾向:
query、update、exec、execute、prepare、eval、invoke、load、readObject、deserialize
- 字段/参数类型倾向:
java.sql.*、javax.sql.*、Runtime、ProcessBuilder、Context、ObjectInputStream
识别规则
按 references/SINK_RULES.md 识别。输出要求:
- 每个敏感调用点输出一条记录
evidence.reason 必须存在;尽量补充 evidence.api 与 evidence.snippet
- 只能基于当前类按需拉取的
code_context 给出证据;不允许引用未提供文件内容
- 不确定时降低
confidence,并在 reason 写明不确定来源
- 每条记录必须严格符合 sink 记录 schema(不得输出自定义字段)
- 必须字段:
record_type="sink"、sink_type、class_name、method_name、evidence.reason、confidence、page_no
- 可为空字段:
method_descriptor/source_file/line_start/line_end
sink_type 必须使用 schema 枚举(小写),禁止输出 SQL/HTTP/FILE_IO 这类自定义大写分类
sql / cmd_exec / ssrf / file_read / file_write / deserialize / xxe / template / spel / ognl / jndi / ldap / runtime_reflect / response_write / redirect / xpath / other