Security İleri

SecurityManager denetimlerinden açık yetkilendirmeye

Devre dışı bırakılan SecurityManager denetimlerini açık uygulama yetkilendirmesi ve dağıtım yalıtımıyla değiştirin.

✕ JDK 23 and earlier
SecurityManager manager = System.getSecurityManager();
if (manager != null) {
    manager.checkRead(path.toString());
}
return Files.readString(path);
✓ JDK 24+
// 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);
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🔍

Açık politika

Yetkilendirme, uygulama mantığında görünür ve test edilebilir durumdadır.

🛡️

Gerçek yalıtım

Süreç, konteyner ve işletim sistemi sınırları uygulamanın tamamını korur.

🚫

Zorunlu geçiş

JDK 24 ve sonraki sürümlerde artık politika uygulayamayan denetimleri kaldırır.

Eski Yaklaşım
SecurityManager denetimleri
Modern Yaklaşım
Açık yetkilendirme
JDK'dan itibaren
24
Zorluk
İleri
SecurityManager denetimlerinden açık yetkilendirmeye
Mevcut

JEP 486'nın Security Manager'ı kalıcı olarak devre dışı bıraktığı JDK 24 ve sonraki sürümlerde zorunludur.

JEP 486, JDK 24'te Security Manager'ı kalıcı olarak devre dışı bıraktığından System.getSecurityManager() üzerinden yapılan denetimler yalnızca JDK 23 ve önceki sürümlerde politika uygulayabilir. Uygulamalar, etki alanı mantığında erişimi açıkça yetkilendirmelidir; güvenilmeyen kullanıcılar söz konusu ağacı eşzamanlı olarak değiştiremiyorsa gerçek dosya sistemi yollarının çözümlenmesi, mevcut sembolik bağlantıların izin verilen bir kök dizinin dışına çıkmasını önler. Saldırganın yazabildiği ağaçlar için SecureDirectoryStream gibi yarış durumlarına dayanıklı, tanıtıcıya göreli erişim kullanın. Yalıtım için süreç, konteyner veya işletim sistemi sınırlarını kullanın. JDK 24, kullanımdan kaldırılmış API'yi geçici olarak korur; ancak bu API etkinleştirilemez ve yerine başka bir süreç içi sanal alan getirilmemiştir.