[论文笔记] 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 在语法中定义了
TypeError和ReferenceError -
四种安全缺陷:cross-site scripting, open redirect, information leakage, code injection
JavaScript 分析的研究趋势
静态分析
静态分析是服务端 JavaScript 代码的主要研究主题。JavaScript 的动态特性和 Web 应用的运行环境造成了如下挑战:
动态语言特性:
-
动态类型:静态分析不好预测
-
动态生成的代码:不可能精确的分析代码
-
动态对象:Object 上属性值的任意增减
Web 运行环境:
-
DOM 和 Events:需要通过静态分析来处理大量DOM API,并探索用户驱动的事件流的庞大搜索空间
-
外部库:使用大规模的库,这些库包含复杂的代码模式
五个 JS 静态分析的研究趋势:
- 扩展研究范围:从 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:在程序运行时收集“确定性事实”,并用这些事实对程序进行特化;采用纯静态方式挖掘确定性事实;在运行时收集库函数返回的对象及其属性访问信息
- 提升分析精度:
-
动态特性:许多混合方法使用动态信息帮助静态分析:运行时分析,收集动态信息特化程序后做静态分析,特化路径;
-
动态对象:不精确指针分析;把“最新分配的对象”与“旧对象”区分开来;相关性追踪;状态敏感指针分析;Heap with Open Objects 抽象
-
循环:循环也是导致 JavaScript 精度下降的主要结构之一,静态确定性分析;循环敏感分析
- 提升分析可扩展性:随着软件规模的上升,分析算法的开销增长太快,难以接受
-
移除不必要的计算:懒惰传播,稀疏数据流分析
-
使用 unsound 的调用图:IDE 中的静态分析更喜欢 scalability 而非 soundness;field-based,only function-objects,ignore dynamic property accesses;JSBAF
-
提升分析性能:并行化;更大的 k-CFA 和更精细的上下文敏感技术
-
提升分析框架可用性:TAJS, WALA, SAFE, JSAI
-
扩展分析的下游应用:
-
类型错误检查:从早期纯 JS 程序到真实 Web 应用,tscheck, Aurebesh
-
安全漏洞检查:四类 JS 安全漏洞:跨站脚本、开放重定向、信息泄露、代码注入;核心方法是信息流分析
-
程序理解:指 IDE “理解” 程序,重构 Refactoring,代码变更影响分析,内存泄漏
动态分析
-
测试技术:重点关注 DOM 操作,动态抽取 DOM 不变式,关注 DOM 状态,自动生成 DOM test fixtures;借鉴和扩展 contrasts
-
爬取和动态符号执行:通过触发 Web 应用的各种事件来收集 DOM 状态;用符号约束+求解来系统地探索未覆盖路径,同时结合随机/污点技术提升事件序列构造效率
-
程序理解和错误检查:轨迹提取、事件可视化和内存剖析,AutoFLox/Vejovis,IDE 支持
其他研究趋势
形式化和推理

类型安全和 JIT 优化


Web 应用安全性


浙公网安备 33010602011771号