Jelly:Node.js 和 TypeScript 程序的静态分析利器
项目介绍
Jelly 是一款专为 Node.js 和 TypeScript 程序设计的静态分析工具。它能够执行以下任务:
- 调用图构建:自动生成程序的调用图,帮助开发者理解代码的执行流程。
- 库使用模式匹配:识别和分析程序中使用的库及其使用模式,确保代码的正确性和一致性。
- 漏洞暴露分析:检测潜在的安全漏洞,帮助开发者提前发现并修复问题。
Jelly 的设计灵感来源于 JAM、TAPIR 和 ACG 等先进技术,并结合了近似解释和间接边界等创新方法,使其在处理复杂代码时表现出色。
项目技术分析
Jelly 的核心技术包括:
- 流不敏感的控制流和指针分析:通过这种分析方法,Jelly 能够高效地处理代码中的控制流和指针操作,生成准确的调用图。
- 访问路径跟踪:Jelly 使用访问路径来跟踪库的使用情况,确保分析的全面性和准确性。
- 近似解释:通过近似解释技术,Jelly 能够在保证分析效率的同时,减少静态分析的不确定性。
- 间接边界:通过设置间接边界,Jelly 能够有效地控制分析的复杂度,避免过度分析导致的性能问题。
项目及技术应用场景
Jelly 适用于以下场景:
- 代码审计:在代码审计过程中,Jelly 可以帮助审计人员快速生成调用图,识别潜在的安全漏洞。
- 库迁移:在进行库迁移时,Jelly 可以分析新旧库的使用模式,帮助开发者快速定位受影响的代码。
- IDE 服务:Jelly 可以集成到 IDE 中,为开发者提供实时的代码分析和建议,提升开发效率。
项目特点
Jelly 具有以下显著特点:
- 高效性:基于流不敏感的控制流和指针分析,Jelly 能够在短时间内处理大规模代码。
- 灵活性:支持多种分析模式,包括静态分析、动态分析和近似解释,满足不同场景的需求。
- 可视化:Jelly 提供了丰富的可视化工具,帮助开发者直观地理解代码结构和分析结果。
- 易用性:通过简单的命令行接口,开发者可以轻松上手,快速进行代码分析。
结语
Jelly 作为一款强大的静态分析工具,不仅能够帮助开发者提升代码质量,还能有效降低安全风险。无论你是代码审计人员、库迁移工程师,还是 IDE 开发者,Jelly 都能为你提供有力的支持。立即体验 Jelly,开启你的代码分析之旅吧!
参考文献
- Benjamin Barslev Nielsen, Martin Toldam Torp, Anders Møller: Modular call graph construction for security scanning of Node.js applications. Proc. ISSTA 2021: 29-41
- Anders Møller, Benjamin Barslev Nielsen, Martin Toldam Torp: Detecting locations in JavaScript programs affected by breaking library changes. Proc. ACM Program. Lang. 4(OOPSLA): 187:1-187:25 (2020)
- Asger Feldthaus, Max Schäfer, Manu Sridharan, Julian Dolby, Frank Tip: Efficient construction of approximate call graphs for JavaScript IDE services. Proc. ICSE 2013: 752-761
- Mathias Rud Laursen, Wenyuan Xu, Anders Møller: Reducing Static Analysis Unsoundness with Approximate Interpretation. Proc. ACM Program. Lang. 8(PLDI): 194:1-194:24 (2024)
- Madhurima Chakraborty, Aakash Gnanakumar, Manu Sridharan, Anders Møller: Indirection-Bounded Call Graph Analysis Proc. ECOOP 2024: 27:1-27:27