mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2026-06-10 15:37:28 +00:00
Revert "fix(security): SecurityClassFilter 改为白名单策略"
This reverts commit a83665ac44.
This commit is contained in:
@@ -78,76 +78,41 @@ public class SecurityClassFilter implements ClassFilter {
|
||||
"jdk.nashorn.internal",
|
||||
"jdk.internal",
|
||||
};
|
||||
|
||||
// 白名单:明确允许 JS 解析器使用的类
|
||||
private static final String[] ALLOWED_CLASSES = {
|
||||
// Nashorn 脚本对象
|
||||
"org.openjdk.nashorn.api.scripting",
|
||||
"jdk.nashorn.api.scripting",
|
||||
// 基础集合类
|
||||
"java.util",
|
||||
// 基础类型
|
||||
"java.lang.String",
|
||||
"java.lang.Integer",
|
||||
"java.lang.Long",
|
||||
"java.lang.Double",
|
||||
"java.lang.Boolean",
|
||||
"java.lang.Math",
|
||||
"java.lang.Number",
|
||||
"java.lang.Object",
|
||||
"java.lang.StringBuilder",
|
||||
"java.lang.StringBuffer",
|
||||
"java.lang.Character",
|
||||
"java.lang.Byte",
|
||||
"java.lang.Short",
|
||||
"java.lang.Float",
|
||||
"java.lang.Enum",
|
||||
"java.lang.Iterable",
|
||||
"java.lang.Comparable",
|
||||
// 时间类
|
||||
"java.time",
|
||||
// 文本处理
|
||||
"java.text",
|
||||
};
|
||||
|
||||
// 白名单包前缀
|
||||
private static final String[] ALLOWED_PACKAGES = {
|
||||
"java.util.",
|
||||
"java.time.",
|
||||
"java.text.",
|
||||
"org.openjdk.nashorn.api.scripting.",
|
||||
"jdk.nashorn.api.scripting.",
|
||||
};
|
||||
|
||||
|
||||
@Override
|
||||
public boolean exposeToScripts(String className) {
|
||||
// 1. 先检查黑名单(快速拒绝已知危险类)
|
||||
// 检查是否在黑名单中
|
||||
for (String dangerous : DANGEROUS_CLASSES) {
|
||||
if (className.equals(dangerous) || className.startsWith(dangerous + ".")) {
|
||||
log.warn("🔒 安全拦截: JavaScript尝试访问危险类 - {}", className);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 检查白名单(只允许明确安全的类)
|
||||
for (String allowed : ALLOWED_CLASSES) {
|
||||
if (className.equals(allowed) || className.startsWith(allowed + ".")) {
|
||||
log.debug("✅ 白名单允许: {}", className);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 检查白名单包前缀
|
||||
for (String pkg : ALLOWED_PACKAGES) {
|
||||
|
||||
// 额外的包级别限制
|
||||
String[] dangerousPackages = {
|
||||
"java.lang.reflect.",
|
||||
"java.io.",
|
||||
"java.nio.",
|
||||
"java.net.",
|
||||
"java.sql.",
|
||||
"javax.script.",
|
||||
"sun.",
|
||||
"jdk.internal.",
|
||||
"jdk.nashorn.internal."
|
||||
};
|
||||
|
||||
for (String pkg : dangerousPackages) {
|
||||
if (className.startsWith(pkg)) {
|
||||
log.debug("✅ 白名单包允许: {}", className);
|
||||
return true;
|
||||
log.warn("🔒 安全拦截: JavaScript尝试访问危险包 - {}", className);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 4. 默认拒绝(白名单策略)
|
||||
log.warn("🔒 安全拦截: JavaScript尝试访问未授权类 - {}", className);
|
||||
return false;
|
||||
|
||||
// 默认也拒绝(白名单策略更安全,但这里为了兼容性使用黑名单)
|
||||
// 如果要更严格,可以改为 return false
|
||||
log.debug("允许访问类: {}", className);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user