mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2025-12-16 20:33:03 +00:00
5.2 KiB
5.2 KiB
JavaScript执行器安全测试
📋 概述
本目录提供了完整的JavaScript执行器安全测试工具和文档,用于验证演练场执行器是否存在安全漏洞。
🎯 测试目标
验证以下安全风险:
| 测试项目 | 危险级别 | 说明 |
|---|---|---|
| 系统命令执行 | 🔴 极高 | 验证是否能执行shell命令 |
| 文件系统访问 | 🔴 极高 | 验证是否能读写本地文件 |
| 系统属性访问 | 🟡 高 | 验证是否能获取系统信息 |
| 反射攻击 | 🔴 极高 | 验证是否能通过反射绕过限制 |
| 网络Socket | 🔴 极高 | 验证是否能创建任意网络连接 |
| JVM退出 | 🔴 极高 | 验证是否能终止应用 |
| SSRF攻击 | 🟡 高 | 验证HTTP客户端访问控制 |
📂 测试资源
parser/
├── src/test/java/cn/qaiu/parser/
│ └── SecurityTest.java # JUnit测试用例(7个测试方法)
├── doc/
│ └── SECURITY_TESTING_GUIDE.md # 详细测试指南和安全建议
├── test-security.sh # 快速执行脚本
└── SECURITY_TEST_README.md # 本文件
web-service/src/test/resources/
└── playground-security-tests.http # HTTP接口测试用例(10个测试)
🚀 快速开始
方式1: 使用Shell脚本(推荐)
cd parser
chmod +x test-security.sh
./test-security.sh
方式2: Maven命令
cd parser
mvn test -Dtest=SecurityTest
方式3: HTTP接口测试
- 启动应用服务器
- 打开
web-service/src/test/resources/playground-security-tests.http - 在IDE中逐个执行测试用例
📊 预期结果
✅ 安全系统(预期)
所有高危测试应该失败,日志中应该显示:
[INFO] 尝试执行系统命令...
[INFO] Runtime.exec失败: ReferenceError: "Java" is not defined
[INFO] ProcessBuilder失败: ReferenceError: "Java" is not defined
✓ 安全: 无法执行系统命令
❌ 不安全系统(需要修复)
如果看到以下日志,说明存在严重安全漏洞:
[ERROR] 【安全漏洞】成功执行系统命令: root
危险: 系统命令执行成功
⚠️ 重要警告
- 仅在测试环境执行 - 这些测试包含危险代码
- 不要在生产环境运行 - 可能导致系统被攻击
- 发现漏洞立即修复 - 不要在公开环境部署有漏洞的版本
🔧 安全修复建议
如果测试发现安全问题,请参考 doc/SECURITY_TESTING_GUIDE.md 中的修复方案:
最关键的修复措施
- 实现ClassFilter - 禁止JavaScript访问危险Java类
- 添加超时机制 - 防止DOS攻击
- HTTP白名单 - 防止SSRF攻击
- 迁移到GraalVM - 使用更安全的JavaScript引擎
示例:ClassFilter实现
import jdk.nashorn.api.scripting.ClassFilter;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
public class SecurityClassFilter implements ClassFilter {
@Override
public boolean exposeToScripts(String className) {
// 禁止所有Java类访问
return false;
}
}
// 创建安全的引擎
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine(new SecurityClassFilter());
📖 详细文档
完整的安全测试指南、修复方案和最佳实践,请查看:
👉 doc/SECURITY_TESTING_GUIDE.md
该文档包含:
- 每个测试用例的详细说明
- 潜在风险分析
- 完整的修复方案
- 安全配置最佳实践
- GraalVM迁移指南
🔍 测试检查清单
执行测试后,请确认:
- ✅ 测试1: 系统命令执行 - 失败(安全)
- ✅ 测试2: 文件系统访问 - 失败(安全)
- ✅ 测试3: 系统属性访问 - 失败(安全)
- ✅ 测试4: 反射攻击 - 失败(安全)
- ✅ 测试5: 网络Socket - 失败(安全)
- ✅ 测试6: JVM退出 - 失败(安全)
- ⚠️ 测试7: SSRF攻击 - 部分失败(禁止内网访问)
💡 常见问题
Q: 为什么要进行这些测试?
A: JavaScript执行器允许运行用户提供的代码,如果不加限制,恶意用户可能:
- 执行系统命令窃取数据
- 读取敏感文件
- 攻击内网服务器
- 导致服务器崩溃
Q: 测试失败是好事还是坏事?
A: 测试失败是好事! 这意味着危险操作被成功阻止了。如果测试通过(返回"危险"),说明存在安全漏洞。
Q: 可以跳过这些测试吗?
A: 强烈不建议! 如果系统对外提供JavaScript执行功能,必须进行安全测试。否则可能导致严重的安全事故。
Q: Nashorn已经废弃了,应该怎么办?
A: 建议迁移到 GraalVM JavaScript,它提供:
- 更好的安全性(默认沙箱)
- 更好的性能
- 活跃的维护和更新
🆘 需要帮助?
如果测试发现安全问题或需要修复建议:
- 查看详细文档:
doc/SECURITY_TESTING_GUIDE.md - 参考HTTP测试用例:
web-service/src/test/resources/playground-security-tests.http - 检查JUnit测试代码:
src/test/java/cn/qaiu/parser/SecurityTest.java
最后更新: 2025-11-28
作者: QAIU
许可: MIT License