Java’da güvenli kodlama ve sık yapılan hatalar
Java uygulamalarında en çok görülen açıkları kendi lab’ındaki zayıf bir uygulamada bulur, kök nedenini anlar, düzeltir ve testle kalıcı hâle getirirsin.
Seviye 401 · 19 ders · 15 pratik lab
Dersler
Enjeksiyon ve ayrıştırma
- SQL ve JPQL enjeksiyonu: birleştirilmiş dizginin bedeli
- Runtime.exec ve ProcessBuilder ile komut enjeksiyonu
- XXE: XML ayrıştırıcıyı güvenli yapılandırmak
- İfade dili ve şablon enjeksiyonu
- Yol geçişi ve zip slip
- Kısa görev: zayıf uygulamadaki enjeksiyonları kapat
Nesneler, günlük ve bağımlılıklar
- Serileştirme açıkları: gadget zincirleri nasıl çalışır
- ObjectInputFilter ve serileştirmeden kaçınmak
- Vaka incelemesi: JNDI araması ve Log4Shell
- Günlük enjeksiyonu ve sahte kayıt satırları
- OWASP Dependency-Check ile bağımlılık taraması
- Kısa görev: açıklı bağımlılıkları güncelle ve doğrula
Kripto ve kimlik
- JCA hataları: ECB, sabit IV ve zayıf özet
- Random yerine SecureRandom
- Parola saklamak: PBKDF2, bcrypt ve argon2
- Oturum ve yetkilendirme hataları
- Hata sayfalarında bilgi sızıntısı
- Kısa görev: şifreleme ve parola saklamayı düzelt
Bitirme
- Bitirme görevi: zayıf kayıt uygulamasını denetle, düzelt ve raporla
Pratik lablar
- Birleştirilmiş JPQL sorgusunu kapatmak: Kullanıcı girdisini JPQL dizgisine ekleyen arama metodunu parametreli hale getir ve regresyon testi ekle.
- Komut enjeksiyonunu ProcessBuilder ile kapatmak: Dosya adını kabuk komutuna ekleyen dönüştürme servisini argüman listeli ProcessBuilder'a çevir; ad doğrulaması ve zaman aşımı ekle.
- Şablon ve ifade dili enjeksiyonunu kapatmak: Kullanıcı metnini ifade olarak değerlendiren bildirim şablonunu yalnızca izinli değişkenleri yerleştiren güvenli bir işleyiciyle değiştir ve deneme girdileriyle testleri geç.
- XML ayrıştırıcısında dış varlıkları kapatmak: Sipariş içe aktarıcısının DocumentBuilderFactory ayarlarında DOCTYPE ve dış varlıkları kapat; yerel dosya okuyan belgenin reddedildiğini test et.
- İndirme uç noktasında dizin dışına çıkışı engellemek: İstenen dosya adını kök dizine göre normalize et; kök dışına çıkan ve simgesel bağla kaçan yolları reddet.
- Arşiv açmada zip slip ve boyut sınırları: Yüklenen arşivi açan kodda hedef dışına yazmayı engelle; toplam boyut, dosya sayısı ve sıkıştırma oranı sınırlarını ekleyip testleri geç.
- Günlüğe sahte satır eklenmesini engellemek: Kullanıcı adını olduğu gibi günlüğe yazan kodda satır sonu ve denetim karakterlerini etkisizleştir.
- Serileştirilmiş girdiye ObjectInputFilter uygulamak: Kuyruktan gelen serileştirilmiş nesneleri okuyan tüketiciye sınıf izin listesi, derinlik ve boyut sınırı içeren süzgeç ekle.
- Serileştirmeyi ve günlükten ad aramayı devreden çıkarmak: Oturum verisini Java serileştirmesiyle saklayan ve günlük iletisinde ad araması yapan uygulamayı JSON'a ve güncel, aramaları kapalı günlük ayarına taşı; testlerle doğrula.
- Belirteç üretimini SecureRandom'a taşımak: java.util.Random ile üretilen sıfırlama belirtecini SecureRandom ile değiştir ve adres için güvenli kodlamayla döndür.
- Parola saklamayı PBKDF2'ye geçirmek: Tuzsuz MD5 ile saklanan parolaları tuzlu PBKDF2'ye geçir; girişte eski özeti doğrulayıp yenisine yükselt ve karşılaştırmayı sabit zamanlı yap.
- ECB ve sabit IV kullanan şifrelemeyi düzeltmek: ECB kipinde ve koda gömülü anahtarla şifreleyen modülü her iletide rastgele nonce kullanan AES-GCM'e geçir; anahtarı dışarıdan al ve eski verinin göçünü yaz.
- Hata sayfasından sızan ayrıntıyı kesmek: Yığın izi ve sürüm bilgisi gösteren hata sayfasını genel ileti ve istek kimliğiyle değiştir; ayrıntı yalnızca günlüğe yazılsın.
- Açıklı bağımlılıkları güncelleyip doğrulamak: Çevrimdışı veritabanıyla Dependency-Check çalıştır; yüksek önemdeki bulguları sürüm yükselterek kapat ve testlerin hâlâ geçtiğini göster.
- Oturum ve yetkilendirme hatalarını kapatmak: Girişte oturum kimliğini yenilemeyen, çerez bayrakları eksik ve kayıt sahipliğini denetlemeyen kayıt uygulamasını düzelt; her kusur için regresyon testi yaz.
Kurs hakkında
Java uygulamalarında en çok görülen açıkları kendi lab’ındaki zayıf bir uygulamada bulur, kök nedenini anlar, düzeltir ve testle kalıcı hâle getirirsin.
Ne öğreneceksin
- Enjeksiyon ve ayrıştırma
- Nesneler, günlük ve bağımlılıklar
- Kripto ve kimlik
- Bitirme
Ön koşullar
Aynı yolun 301 düzeyine kadar olan konularını uygulamış olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 401 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.