[论文笔记] Analysis of JavaScript Programs: Challenges and Research Trends

JavaScript 的特点

JavaScript 的语言特点

“动态”特性,使得静态分析不好进行(难以找到合适的抽象)

  • 动态类型的(dynamically typed)并且支持广泛的隐式类型转换的使用

  • 基于原型的面向对象(Prototype-based OOP),可以动态增减实例上的属性

  • 动态生成代码,动态作用域,属性名的动态计算等动态特性

  • “函数式”特性

JavaScript 的运行环境特点

  • HTML + CSS + JS,DOM 和 JS 进行交互,DOM API 是动态、异步和复杂的

  • 大多数的 Web 应用包含第三方代码或者动态加载的 JS 脚本

  • Node.js 提供了使用 JS 开发服务端代码的可能

类型错误与安全缺陷

  • JS 在语法中定义了 TypeErrorReferenceError

  • 四种安全缺陷:cross-site scripting, open redirect, information leakage, code injection

JavaScript 分析的研究趋势

静态分析

静态分析是服务端 JavaScript 代码的主要研究主题。JavaScript 的动态特性和 Web 应用的运行环境造成了如下挑战:

动态语言特性:

  • 动态类型:静态分析不好预测

  • 动态生成的代码:不可能精确的分析代码

  • 动态对象:Object 上属性值的任意增减

Web 运行环境:

  • DOM 和 Events:需要通过静态分析来处理大量DOM API,并探索用户驱动的事件流的庞大搜索空间

  • 外部库:使用大规模的库,这些库包含复杂的代码模式

五个 JS 静态分析的研究趋势:

  1. 扩展研究范围:从 JS 的一个子集开始,研究者们正在扩展研究范围使得研究包含更多的 JS 特性:
  • JavaScript 子集:\(\text{JavaScript}_{safe} \rightarrow \text{JavaScript}_\text{GK}\) 从一个安全的语言子集出发,添加某些动态特性

  • 动态加载的代码:分阶段的信息流分析/指针分析 Staged Analysis

  • 动态特性:静态地追踪被传递给 eval() 的字符串常量,然后按字符串常量的类型重写 eval;运行时动态收集字符串实参,对于常见模式消除 eval;重写 with 代码块

  • DOM 和 Events:把 DOM 对象做抽象,考虑所有的 event calls 的组合(sound but not precise enough);把动态阶段得到的具体 DOM 值喂给静态分析器使用;为每个 DOM 节点生成单一的抽象对象,并更准确地刻画 DOM 树结构

  • 分析 libraries:在程序运行时收集“确定性事实”,并用这些事实对程序进行特化;采用纯静态方式挖掘确定性事实;在运行时收集库函数返回的对象及其属性访问信息

  1. 提升分析精度:
  • 动态特性:许多混合方法使用动态信息帮助静态分析:运行时分析,收集动态信息特化程序后做静态分析,特化路径;

  • 动态对象:不精确指针分析;把“最新分配的对象”与“旧对象”区分开来;相关性追踪;状态敏感指针分析;Heap with Open Objects 抽象

  • 循环:循环也是导致 JavaScript 精度下降的主要结构之一,静态确定性分析;循环敏感分析

  1. 提升分析可扩展性:随着软件规模的上升,分析算法的开销增长太快,难以接受
  • 移除不必要的计算:懒惰传播,稀疏数据流分析

  • 使用 unsound 的调用图:IDE 中的静态分析更喜欢 scalability 而非 soundness;field-based,only function-objects,ignore dynamic property accesses;JSBAF

  • 提升分析性能:并行化;更大的 k-CFA 和更精细的上下文敏感技术

  1. 提升分析框架可用性:TAJS, WALA, SAFE, JSAI

  2. 扩展分析的下游应用:

  • 类型错误检查:从早期纯 JS 程序到真实 Web 应用,tscheck, Aurebesh

  • 安全漏洞检查:四类 JS 安全漏洞:跨站脚本、开放重定向、信息泄露、代码注入;核心方法是信息流分析

  • 程序理解:指 IDE “理解” 程序,重构 Refactoring,代码变更影响分析,内存泄漏

动态分析

  1. 测试技术:重点关注 DOM 操作,动态抽取 DOM 不变式,关注 DOM 状态,自动生成 DOM test fixtures;借鉴和扩展 contrasts

  2. 爬取和动态符号执行:通过触发 Web 应用的各种事件来收集 DOM 状态;用符号约束+求解来系统地探索未覆盖路径,同时结合随机/污点技术提升事件序列构造效率

  3. 程序理解和错误检查:轨迹提取、事件可视化和内存剖析,AutoFLox/Vejovis,IDE 支持

其他研究趋势

形式化和推理

image

类型安全和 JIT 优化

image

image

Web 应用安全性

image

posted @ 2025-07-22 21:26  sysss  阅读(17)  评论(0)    收藏  举报