JavaScript is an increasingly popular language for server-side development, thanks in part to the Node.js runtime environment and its vast ecosystem of modules. With the Node.js package manager npm, users are able to easily include external modules as dependencies in their projects. However, npm installs modules with all of their functionality, even if only a fraction is needed, which causes an undue increase in code size. Eliminating this unused functionality from distributions is desirable, but the sound analysis required to find unused code is difficult due to JavaScript's extreme dynamicity. We present a fully automatic technique that identifies unused code by constructing static or dynamic call graphs from the application's tests, and replacing code deemed unreachable with either file- or function-level stubs. If a stub is called, it will fetch and execute the original code on-demand, thus relaxing the requirement that the call graph be sound. The technique also provides an optional guarded execution mode to guard application against injection vulnerabilities in untested code that resulted from stub expansion. This technique is implemented in an open source tool called Stubbifier, which supports the ECMAScript 2019 standard. In an empirical evaluation on 15 Node.js applications and 75 clients of these applications, Stubbifier reduced application size by 56% on average while incurring only minor performance overhead. The evaluation also shows that Stubbifier's guarded execution mode is capable of preventing several known injection vulnerabilities that are manifested in stubbed-out code. Finally, Stubbifier can work alongside bundlers, popular JavaScript tools for bundling an application with its dependencies. For the considered subject applications, we measured an average size reduction of 37% in bundled distributions.


翻译:JavaScript 是一种对服务器端开发越来越受欢迎的语言, 这部分归功于 Norde. js 运行时环境及其巨大的模块生态系统。 由于 Npm 的 Node. js 软件包管理员 ndm, 用户能够很容易地将外部模块作为项目的依赖性纳入项目。 但是, npm 安装包含所有功能的模块, 即使只需要一个分数, 也会导致代码尺寸的不适当增加。 从分布中删除这个未使用的功能是可取的, 但寻找未使用的代码所需的正确分析是困难的。 由于 JavaScript 的极端动态性能。 我们提出了一个完全自动的技术, 通过从应用程序测试中构建静态或动态调用图来识别未使用的代码, 用户可以很容易地将外部模块的代码包含在内。 如果调用鼠标, 它会获取并执行原始的代码, 从而放松调时, 调时, 调时, 需要找到一个可选择的默认执行模式, 用于防范未测试的代码的输入脆弱性。 这个技术是完全自动的代码的, 在应用程序中, 在可测量的操作的操作中, 将显示一个Stubbblidealb lippe lide lide lapp li li li lip lip lip lip lip lip lip lip lip lipp lip la lipp lip lip lip lip lip lip lip lip liver lipperus

0
下载
关闭预览

相关内容

JavaScript 是弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程。
专知会员服务
51+阅读 · 2021年6月30日
【2020新书】Web应用安全,331页pdf
专知会员服务
23+阅读 · 2020年10月24日
专知会员服务
39+阅读 · 2020年9月6日
Linux导论,Introduction to Linux,96页ppt
专知会员服务
78+阅读 · 2020年7月26日
Keras François Chollet 《Deep Learning with Python 》, 386页pdf
专知会员服务
152+阅读 · 2019年10月12日
强化学习最新教程,17页pdf
专知会员服务
174+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
【SIGGRAPH2019】TensorFlow 2.0深度学习计算机图形学应用
专知会员服务
39+阅读 · 2019年10月9日
分布式并行架构Ray介绍
CreateAMind
9+阅读 · 2019年8月9日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
Transferring Knowledge across Learning Processes
CreateAMind
28+阅读 · 2019年5月18日
移动端机器学习资源合集
专知
8+阅读 · 2019年4月21日
disentangled-representation-papers
CreateAMind
26+阅读 · 2018年9月12日
(TensorFlow)实时语义分割比较研究
机器学习研究会
9+阅读 · 2018年3月12日
分布式TensorFlow入门指南
机器学习研究会
4+阅读 · 2017年11月28日
【推荐】用Python/OpenCV实现增强现实
机器学习研究会
15+阅读 · 2017年11月16日
【推荐】树莓派/OpenCV/dlib人脸定位/瞌睡检测
机器学习研究会
9+阅读 · 2017年10月24日
【推荐】基于TVM工具链的深度学习编译器 NNVM compiler发布
机器学习研究会
5+阅读 · 2017年10月7日
Arxiv
0+阅读 · 2021年12月25日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
5+阅读 · 2019年2月28日
Arxiv
3+阅读 · 2018年3月13日
VIP会员
相关VIP内容
专知会员服务
51+阅读 · 2021年6月30日
【2020新书】Web应用安全,331页pdf
专知会员服务
23+阅读 · 2020年10月24日
专知会员服务
39+阅读 · 2020年9月6日
Linux导论,Introduction to Linux,96页ppt
专知会员服务
78+阅读 · 2020年7月26日
Keras François Chollet 《Deep Learning with Python 》, 386页pdf
专知会员服务
152+阅读 · 2019年10月12日
强化学习最新教程,17页pdf
专知会员服务
174+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
【SIGGRAPH2019】TensorFlow 2.0深度学习计算机图形学应用
专知会员服务
39+阅读 · 2019年10月9日
相关资讯
分布式并行架构Ray介绍
CreateAMind
9+阅读 · 2019年8月9日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
Transferring Knowledge across Learning Processes
CreateAMind
28+阅读 · 2019年5月18日
移动端机器学习资源合集
专知
8+阅读 · 2019年4月21日
disentangled-representation-papers
CreateAMind
26+阅读 · 2018年9月12日
(TensorFlow)实时语义分割比较研究
机器学习研究会
9+阅读 · 2018年3月12日
分布式TensorFlow入门指南
机器学习研究会
4+阅读 · 2017年11月28日
【推荐】用Python/OpenCV实现增强现实
机器学习研究会
15+阅读 · 2017年11月16日
【推荐】树莓派/OpenCV/dlib人脸定位/瞌睡检测
机器学习研究会
9+阅读 · 2017年10月24日
【推荐】基于TVM工具链的深度学习编译器 NNVM compiler发布
机器学习研究会
5+阅读 · 2017年10月7日
Top
微信扫码咨询专知VIP会员