客户端JavaScript代码的静态分析方法
字数 1804 2025-08-27 12:33:31
客户端JavaScript代码静态分析方法详解
1. 静态分析概述
静态分析是在不执行代码的情况下对客户端JavaScript代码进行分析的过程,目的是发现潜在的安全问题。随着现代Web应用将大量功能和逻辑转移至前端(使用AngularJS、ReactJS、Vue.js等框架),客户端攻击面显著增加,静态分析变得尤为重要。
2. JavaScript文件收集方法
2.1 使用Burp Suite收集
Burp Suite Community Edition方法:
- 通过代理浏览整个应用程序
- 切换到Proxy > HTTP history
- 使用显示过滤器仅显示JavaScript文件
- 复制所有JS文件的URL
Burp Suite Professional方法:
- 在Target > Site map中右键点击目标站点
- 选择Engagement tools > Find scripts
- 可导出所有脚本或复制URL
2.2 使用互联网档案
Wayback Machine方法:
- 访问https://archive.org/web/
- 搜索目标网站历史记录
- 查找旧版JS文件(可能包含已删除但未清理的文件)
自动化工具waybackurls:
go get waybackurls
waybackurls internet.org | grep "\.js" | uniq | sort
验证文件有效性:
cat js_files_url_list.txt | parallel -j50 -q curl -w 'Status:%{http_code}\t Size:%{size_download}\t %{url_effective}\n' -o /dev/null -sk
3. 代码可读性提升
3.1 代码精简与混淆
精简(Minification):
- 删除注释和格式化字符
- 删除未使用代码
- 缩短变量和函数名
- 工具示例:UglifyJS
混淆(Obfuscation):
- 修改变量、函数和成员名
- 使代码难以理解
3.2 反混淆工具
- JS Beautifier:美化代码,部分去混淆
- JStillery:高级反混淆
- JSDetox:专门用于恶意JS分析
- IlluminateJs:复杂混淆模式处理
- JSNice:智能变量名恢复
注意:没有万能的反混淆工具,通常需要结合多种工具和手动分析
4. 关键信息识别
4.1 端点信息提取
relative-url-extractor工具:
- 提取JS文件中所有相对路径
- 支持本地和远程文件
- 可直接处理精简代码
LinkFinder工具:
python linkfinder.py -i https://example.com -d -o cli
- 识别所有端点和参数
- 内置jsbeautifier解析器
- 可枚举域名下所有JS文件
4.2 云资源识别
CloudScraper工具:
- 搜索云资源(如Amazon S3 Buckets)
- 识别托管在云服务的JS文件
- 检查JS内容中的云资源引用
4.3 敏感信息发现
搜索方法:
- 正则表达式:适合固定格式的凭据
- 基于熵:适合随机性强的API密钥和令牌
工具推荐:
- truffleHog:支持熵和正则搜索,高度可定制
- grep/sed/awk:基础但强大的命令行工具
4.4 危险代码区域
-
XSS相关:
innerHTML及其框架等价物- React中的
dangerouslySetInnerHTML - Angular中的
bypassSecurityTrustX方法
-
eval函数:
- 客户端和服务器端都易出问题
-
postMessage API:
- 查找
window.postMessage和window.addEventListener - 注意框架封装实现
- 查找
-
Web存储:
window.localStoragewindow.sessionStorage- 检查存储的敏感数据
4.5 安全扫描工具
-
JSPrime:静态分析工具(已停止更新)
-
ESLint:
- 最流行的JS linter
- 可添加自定义安全规则
- 支持Angular、React等框架的安全检查
-
Retire.js:
- 识别过时JS框架/库
- 可用作独立工具、浏览器插件或Burp/ZAP插件
- 注意:可能存在误报
5. 分析流程总结
- 收集:使用Burp或互联网档案获取所有JS文件
- 预处理:对精简/混淆代码进行反混淆处理
- 端点提取:识别所有URL和API端点
- 敏感信息:搜索凭据、API密钥等
- 危险代码:检查已知安全风险模式
- 组件审计:识别易受攻击的框架版本
- 工具验证:使用安全扫描工具交叉验证