من فحوصات SecurityManager إلى التخويل الصريح
استبدل فحوصات SecurityManager المعطّلة بتخويل صريح داخل التطبيق وعزل على مستوى النشر.
SecurityManager manager = System.getSecurityManager();
if (manager != null) {
manager.checkRead(path.toString());
}
return Files.readString(path);
// Untrusted users must not be able to modify this tree
Path root = allowedRoot.toRealPath();
Path resolved = root.resolve(requested)
.normalize()
.toRealPath();
if (!resolved.startsWith(root)) {
throw new SecurityException(
"Path is outside the allowed root");
}
return Files.readString(resolved);
سياسة صريحة
يكون التخويل واضحاً وقابلاً للاختبار في منطق التطبيق.
عزل حقيقي
تحمي حدود العمليات والحاويات ونظام التشغيل التطبيق بأكمله.
ترحيل مطلوب
يزيل الفحوصات التي لم تعد قادرة على فرض السياسات في JDK 24 والإصدارات الأحدث.
مطلوب في JDK 24 والإصدارات الأحدث، حيث يعطّل JEP 486 مدير الأمان نهائياً.
عطّل JEP 486 مدير الأمان نهائياً في JDK 24، لذلك لا يمكن للفحوصات عبر System.getSecurityManager() فرض السياسات إلا في JDK 23 والإصدارات الأقدم. يجب على التطبيقات تخويل الوصول صراحةً في منطق المجال؛ ويمنع تحليل مسارات نظام الملفات الحقيقية الروابط الرمزية الموجودة من تجاوز جذر مسموح به عندما يتعذر على المستخدمين غير الموثوق بهم تعديل شجرة الملفات بالتزامن. أما أشجار الملفات التي يمكن للمهاجم الكتابة فيها، فاستخدم معها وصولاً نسبياً إلى المقبض ومقاوماً لسباقات التزامن، مثل SecureDirectoryStream. استخدم حدود العمليات أو الحاويات أو نظام التشغيل للعزل. يحتفظ JDK 24 مؤقتاً بواجهة API المهملة، لكن لا يمكن تمكينها ولم يُستعَض عنها ببيئة اختبار معزولة أخرى داخل العملية.