Kasım ayı geldiğinde güvenlik dünyası OWASP Top 10'un yeni sürümünü tartışmaya başlıyor; listeyi açanlar ise gözlerini ovuşturarak aynı isimleri görüyor. Enjeksiyon, kırık erişim denetimi, şifreleme hataları... Bu isimler on yılı aşkın süredir listede. Bir sınavı tekrar tekrar aynı sorularla veriyorsak, sorun kağıtta değil sınıftadır. Bu yazıdaki iddiamız şu: OWASP listesi bir çalışma programı değil, bir ayna; ve çoğu ekip aynaya değil duvara bakıyor.
Önce bir şeyi netleştirelim: liste kötü değil. Tam tersine, sektörün en iyi özetlenmiş risk envanterlerinden biri. Sorun, listenin okunma biçiminde — bir kontrol listesi olarak okunmasında, yazılımda değil.
Aynı hatalar neden hâlâ ilk onda?
Cevap ilk cümlesinde saklı: listeyi dolduran şey teknoloji değil davranıştır. SQL enjeksiyonu 2003'te de bugün de aynı mekânizmayla çalışır — kullanıcıdan gelen metin kod olarak çalıştırılır. Değişen tek şey araçlar: ORM'ler, hazır sorgular, şablon motorları. Ama her nesilde yeni bir çerçeve, "artık güvendeyiz" hissini yeniden üretiyor ve aynı his, aynı hatayı bir tur daha döndürüyor. Hatalar listede değil, kod inceleme kültüründe yaşar; liste güncellense de kültür güncellenmediği için sonuç değişmiyor. Eski hataların zırhı, onları bir daha yapmamak üzere ezberletilen acıdır; yeni çerçeve geldiğinde ise o zırh kasayla birlikte çıkarılır.
Örnek: kırık erişim denetimi
// Kötü: kimlik doğrulama var, yetkilendirme yok
export async function GET(_req, { params }) {
return NextResponse.json(await db.orders.find(params.id));
}
// İyi: kayıt bu kullanıcıya ait mi?
const order = await db.orders.find(params.id);
if (!order || order.userId !== session.userId) {
return NextResponse.json({ error: "bulunamadı" }, { status: 404 });
}
Fark iki satır; fark yıllarca gündemde kalacak bir veri sızıntısı. Kırık erişim denetimi, tarama araçlarının en zor gördüğü, insanın en kolay görebileceği hata sınıfıdır. Görebilmek için ise soru "açık var mı" değil, "bu kayıt kimin" olmalıdır. Aynı soru sadece API'lerde değil, sayfa yönlendirmelerinde, dosya indirme bağlantılarında, hatta yazdırma görünümlerinde tekrar tekrar sorulmalıdır; saldırgan kapıyı en çok beklenmeyen yerden çalar.
Ders çalışmanın modern hali
Gerçek fark, listenin ezberlenmesinde değil, onu sürece gömmekte. Talep toplantısında tehdit modelleme sorusu sorulur: veri buraya nasıl akar, kim değiştirebilir? Kod incelemesinde yetkilendirme ayrı bir gözle bakılır: her uç noktada oturum sahibi ile kayıt sahibi eşleşiyor mu? Sürekli entegrasyonda bağımlılık ve gizli anahtar denetimi çalışır. Bunların hiçbiri OWASP'ı ezberlemekle örtüşmez; hepsi listedeki kalemlerin otomatik olarak karşılanmasını sağlar.
Ekiplere somut bir ölçek de gereklidir. "Güvenlik farkındalığı" diye bir hedef koyduğunuzda ölçemediğiniz için gelişemezsiniz; onun yerine "bu çeyrekte bütün yeni uç noktalarda yetkilendirme testi yazıldı mı" gibi denetlenebilir bir hedef koyun. Ölçülen şey gelişir, ölçülmeyen şey hiç değişmez.
Belki en dürüst cümle şudur: OWASP Top 10'un değişmemesi, sektörün başarısızlığının değil, hafızasızlığının kanıtıdır. Liste her güncellendiğinde yeni isimler ekleniyor — modern bulut, yapay zekâ destekli saldırılar, tedarik zinciri riskleri — ama eski isimler hiç inmiyor. Eski isimler inmeyecek; çünkü onları liste tutmaz, alışkanlık düşürür. Ekibinizin bir sonraki retrospektifinde tek soru yeter: geçen ay yazdığımız on bin satırın kaçında yetkilendirme kontrolünü hatırladık? Cevap on ise sorun yok. Cevap "farketmedik" ise, listenin neden hâlâ aynı olduğunu tekrar anlamanıza gerek yok — listeyi siz dolduruyorsunuz.
Okur Yorumları (0)