1. 流敏感性(Flow Sensitivity)
流不敏感分析:将程序视作无序的语句集合,不考虑语句间的控制流顺序
流敏感分析:考虑语句的执行顺序
示例(流敏感 vs 流不敏感)

- 流不敏感分析:会认为x可能是 1 或 10(忽略执行顺序,合并所有赋值);
- 流敏感分析:会遵循执行顺序 —— 步骤 2 的x=10覆盖了步骤 1 的x=1,因此use(x)中x必然是 10(但不区分if分支是否执行,因为流敏感不关注分支差异)。
2. 路径敏感性(Path Sensitivity)
路径敏感分析:在流敏感的基础上,进一步区分 “不同分支路径” 的差异—— 不仅遵循执行顺序,还会跟踪if-else、循环等分支的选择,为每条关键路径维护独立的变量状态,仅在路径合并时整合结果。
路径敏感的分析一定是流敏感的;但反之不一定成立
示例(路径敏感 vs 路径不敏感)

- 路径不敏感分析(但流敏感):遵循执行顺序,但合并所有分支的变量状态 —— 认为x可能是 20 或 30;
- 路径敏感分析:在流敏感基础上,跟踪两条路径 —— 路径 1(flag=true)时x=20,路径 2(flag=false)时x=30,能精准判断 “use(x)的取值依赖于 flag 的分支选择”。
3. 上下文敏感性(Context Sensitivity)
针对跨函数分析的场景
上下文敏感性,就是是否考虑函数调用的“上下文场景” 。
上下文敏感分析:同一函数被不同调用者、在不同位置调用时,分析状态(如函数参数、内部变量)相互独立,不混淆不同调用场景的结果。
示例(上下文敏感 vs 上下文不敏感)

- 上下文敏感分析:区分两个调用场景,明确x=6、y=11(独立跟踪每个调用的参数和返回值);
- 上下文不敏感分析:混淆两个场景,认为addOne的返回值可能是 6 或 11,所以x的值可能是6或11,y的值可能是6或11。
4. 域敏感性(Field Sensitivity)
指分析工具是否区分对象的不同成员字段(属性) ,是否将同一对象的所有字段 “笼统合并” 为一个整体进行分析。
示例(域敏感 vs 域不敏感)

- 域不敏感分析:将webView对象视为一个整体;仅知道webView对象有 “启用 JS”“敏感桥”“普通名称” 等状态,但无法精准关联 “jsEnabled=true且bridgeName敏感” 的组合条件 —— 可能误判(如仅appName被修改时,仍认为对象有风险)或漏判(如未识别两个字段的组合触发条件)
- 域敏感分析:独立跟踪jsEnabled、bridgeName、appName三个字段的状态;明确jsEnabled=true(满足风险前提)且bridgeName含 “sensitive”(满足敏感条件),精准触发flagAsVulnerable()—— 既不遗漏漏洞,也不因appName等非敏感字段误报
参考:
https://blog.wohin.me/posts/nju-program-analysis-08/
https://bbs.huaweicloud.com/blogs/234041

被折叠的 条评论
为什么被折叠?



