Ajanla yazılan uygulamalarda en sık gördüğüm 6 güvenlik açığı
1. Gizli anahtarın istemci koduna gömülmesi. Ödeme servisinin gizli anahtarı, e-posta servisinin anahtarı, yapay zeka servisinin anahtarı tarayıcıya giden JavaScript dosyasının içinde. Sayfanın kaynağını açan herkes görebiliyor. Ajana anahtarı nereye koyacağını söylemezseniz, çalışan en kısa yolu seçiyor.
2. Veritabanı kurallarının açık kalması. Firebase'de test modunda başlayan proje, kurallar yazılmadan yayına çıkıyor. Supabase'de satır düzeyinde güvenlik kapalı bırakılıyor. Sonuç aynı: herhangi bir kullanıcı başkasının kayıtlarını okuyabiliyor, bazen silebiliyor.
3. Yetki kontrolünün sadece arayüzde yapılması. Yönetici butonu normal kullanıcıya gösterilmiyor ama arkadaki uç nokta kimin çağırdığına bakmıyor. Tarayıcının geliştirici araçlarıyla isteği elle atan herkes yönetici işlemi yapabiliyor.
4. Kimlik numarasıyla erişim. Adres çubuğundaki sipariş numarasını bir artırınca başkasının siparişi açılıyor. Ajan çalışan bir detay sayfası yazıyor, ama bu siparişin bu kullanıcıya ait olup olmadığını kontrol etmesini kimse istemediyse etmiyor.
5. Dosya yükleme. Profil fotoğrafı yükleme alanına her tür dosya kabul ediliyor, dosyalar herkese açık bir klasöre gidiyor ve adları tahmin edilebilir.
6. Hata mesajlarında fazla bilgi. Üretimde hata olunca kullanıcıya veritabanı sorgusu, dosya yolu, bazen bağlantı bilgisi gösteriliyor.
Yapılabilecek en ucuz şey, ajana iş bittikten sonra ayrı bir oturumda kodu güvenlik açısından incelettirmek. Bunu yaparken somut sorular sorun: gizli anahtar istemciye gidiyor mu, her uç nokta kullanıcıyı kontrol ediyor mu, bir kullanıcı başkasının verisine ulaşabilir mi. Genel bir güvenli mi sorusuna genel bir evet cevabı alırsınız.
Ama bu yeterli değil. Kullanıcı verisi, ödeme ya da sağlık bilgisi tutan bir ürünü yayına almadan önce bu işi bilen birine bir gün baktırın. İki hesap açıp birinin verisine diğerinden ulaşmaya çalışmak bile çoğu açığı bir saatte ortaya çıkarıyor. Bunu kendiniz de yapabilirsiniz, sadece bir saat ayırın.



@mean