news 2026/5/4 9:57:18

项目实训(五):面向 AI 解释的 SQL 注入传播链记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
项目实训(五):面向 AI 解释的 SQL 注入传播链记录

一、本次改动的背景

上一篇里,我主要补了函数调用传播和作用域处理,让 SQL 注入检测不再只停留在函数定义本身,而是可以根据真实调用点的实参状态,继续进入函数体做分析。

这一轮没有新增新的漏洞类型,也没有大幅调整整体架构,而是继续沿着 SQL 注入这条主线,把检测结果里的“传播过程”记录得更完整一些。

之前后端已经可以输出source_linesql_build_linesink_line这类字段,能够说明用户输入、SQL 构造和execute(...)大概分别出现在哪几行。

但这些信息还是比较粗。它们能说明“风险发生在哪”,却不能完整说明“数据是怎么一步步传过去的”。对于后续 AI 解释来说,如果只拿到SQLInjection标签和几个行号,生成的解释就容易比较泛。

所以这次的重点,是先由后端把传播链事实记录清楚,再交给后续 AI 模块组织成用户能看懂的说明和修复建议。

二、新增 flow_trace 传播链

这次主要新增了一个结构化字段:

flow_trace

它用来记录从 source 到 sink 的关键传播步骤。目前主要记录:

source assign function_call parameter_bind sql_build sink

对于涉及返回值传播的场景,也会继续记录return相关步骤。

也就是尽量把下面这条链路记录下来:

用户输入 -> 变量赋值 -> 函数调用 -> 参数绑定 -> SQL 构造 -> execute 执行

这里我没有选择在 B 阶段直接生成一大段中文解释,而是先保留结构化事实。因为 B 阶段更适合做静态分析和证据提取,比如哪一行识别到了用户输入、哪个变量被污染、实参绑定到了哪个形参、SQL 在哪里构造、最终在哪里进入execute(...)

这些信息本身不一定适合直接展示给用户,但很适合交给后续 AI 解释模块使用。

三、传播链记录了什么

这次在后端新增了EvidenceStep,用来表示传播链上的一步。它大致记录:

kind line symbol from_symbol to_symbol function_name source_kind source_label source_selector sink_label sql_shape

其中kind表示当前步骤的类型,例如sourceassignfunction_callparameter_bindsql_buildsink

例如下面这段代码:

defrun_query(uid):sql=f"SELECT * FROM users WHERE id ={uid}"cursor.execute(sql)user_id=request.args.get("id")run_query(user_id)

内部可以记录出类似这样的传播链:

source@5 -> assign@5 -> function_call@6 -> parameter_bind@6 -> sql_build@2 -> sink@3

对应含义是:第 5 行识别到用户输入,并赋值给user_id;第 6 行user_id被传入run_query,并绑定到形参uid;第 2 行uid被拼接进动态 SQL;第 3 行 SQL 进入cursor.execute

这样后端输出的结果就不只是“这里有 SQL 注入风险”,而是能把风险形成过程记录下来。后续 AI 可以根据这些步骤生成更自然的解释,例如说明用户输入如何进入函数、如何参与 SQL 构造、最后如何到达执行点。

四、和前端、AI 模块的关系

这里我做了一个边界区分。

flow_trace目前主要保留在 B 阶段的中间结果里,也就是:

RiskCandidate.flow_trace

它主要服务后续 AI 解释模块和结果整理层。

最终返回给 VS Code 插件的RiskItem暂时不直接暴露完整传播链。因为前端当前更需要展示的是风险类型、风险说明、修复建议和最终解释,而不是底层的每一个传播步骤。

目前分工大致是:

B 阶段:记录结构化传播链 AI 解释模块:根据传播链生成解释和修复建议 前端插件:展示最终整理后的检测结果

这样职责会清楚一些,也方便后续继续扩展。

五、测试情况与目前边界

这次补充了函数调用传播链相关测试,重点验证函数调用场景下能够记录:

source assign function_call parameter_bind sql_build sink

运行命令为:

python-m unittest discover-s tests

当前测试结果:

Ran 35 tests OK

目前flow_trace主要还是服务 Python SQL 注入检测主线,已经可以覆盖普通变量传播、函数调用、参数绑定、返回值传播和executesink。

不过它还没有完整覆盖跨文件调用、类方法、对象属性、容器元素、高阶函数等复杂情况。这些后续可以继续通过补充新的EvidenceStep.kind或扩展字段来完善。

整体来看,这一轮改动不算大,重点也不是新增检测能力,而是让已有 SQL 注入检测结果更适合后续 AI 解释。之前后端更多是输出几个关键行号,现在则开始记录更细的传播链事实:

source -> assign -> function_call -> parameter_bind -> sql_build -> sink

这样后续 AI 模块在生成漏洞解释时,就不需要只根据风险标签和行号进行推测,而是可以基于后端给出的结构化传播路径,生成更准确、更贴近代码实际执行过程的说明和修复建议。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 9:57:07

新手如何通过快马平台轻松上手windows18-hd19主题开发项目

作为一个刚接触前端开发的新手,我最近在InsCode(快马)平台上尝试了windows18-hd19主题开发项目,发现这个平台特别适合像我这样的初学者快速上手。下面分享我的学习过程和心得。 项目结构搭建 windows18-hd19主题最吸引我的地方是它清晰的界面分区。通过…

作者头像 李华
网站建设 2026/5/4 9:55:35

通过Taotoken模型广场为不同任务选择合适的性价比模型

通过Taotoken模型广场为不同任务选择合适的性价比模型 1. 模型选型的核心考量因素 在实际开发中,不同任务对模型的需求存在显著差异。摘要任务通常需要较强的文本理解能力,翻译任务依赖多语言处理性能,而代码生成则要求模型具备结构化输出能…

作者头像 李华
网站建设 2026/5/4 9:53:42

WTDKP4C5-S1开发板双芯架构与边缘AI开发实战

1. WTDKP4C5-S1开发板深度解析:双芯架构与边缘AI实战指南在嵌入式开发领域,Espressif的ESP32系列芯片凭借其优异的无线性能和丰富的外设接口,已成为物联网开发的标杆方案。而近期Wireless-Tag推出的WTDKP4C5-S1开发板,通过创新的双…

作者头像 李华
网站建设 2026/5/4 9:53:40

运营商:Token生产、营销和运营 和Token的智能体封装实战工作坊-周红伟

《运营商:Token生产、营销和运营 和Token的智能体封装实战工作坊》大模型算法实战专家—周红伟 法国科学院算法博士/前阿里人工智能专家/马上消金风控负责人课程背景企业的AI投入正进入“算账期”。2026年:“用AI Token经营来重塑业务。企业客户面对的不…

作者头像 李华