Cloud üzerinde güvenli ve sağlam bir web uygulaması geliştirmek, gerçekten zor bir iştir. Eğer kolay olduğunu düşünüyorsanız, emin olun bir yerlerde yanlış yapıyorsunuzdur.

Eğer 1 ay içerisinde iyi ve güvenli bir ürün geliştirdiğinizi düşünüyorsanız, ürününüzü aşağıdaki listeye bakarak tekrar gözden geçirmenizde fayda var. Liste basit olmakla beraber tam değildir fakat web uygulama güvenliği açısından en kritik etmenleri içerisinde barındırır.

Veritabanı

  • Kullanıcı kimlik bilgileri, email adresleri ve varsa fatura adresi gibi veriler için şifreleme kullanın.
  • Eğer veritabanınız AWS Aurora gibi bir düşük bütçeli şifreleme destekliyorsa aktifleştirin. Bunu yapmak disk üzerindeki verilerinizi korumanızı sağlar. Ayrıca, veritabanı yedeklerinizin de şifreli tutulduğundan emin olun.
  • Veritabanı kullanıcı için izinleri, kullanıcının ihtiyacına göre ayarlayın. Yönetici hesabını kullanmamak ve veritabanı üzerinde zayıf parola barındıran kullanıcıları silmek de yapmanız gerekenler arasında.
  • Şifrelemeler ve hassas işlemler için gerekli anahtarları uygulamalarınızın içerisine gömülü olarak kullanmayın. Anahtarları saklayıp dağıtabileceğiniz bir yeriniz olsun.
  • SQL enjeksiyonlarını engellemek için "preparedstatements" kullanın.

Yazılım Geliştirme

  • Yazılımınızın bütün parçalarının her versiyonlarında zafiyetlere karşı tarama yapılmış olduğundan emin olun.
  • Yazılımınızı izole edilmiş güvenli bir ortamda geliştirin.

Kimlik Doğrulama

  • Parolaları bcrypt gibi güvenli bir algoritmayla hashleyin. Kendi kripto algoritmanızı yazmayın, kullanılan ve güvenli olarak kabul edilen kripto algoritmalarını kullanın. O algoritmaların "güvenli" olarak kabul edilmesi için yıllarca çalışıldı ve milyonlarca insan her gün kullanıyor.
  • Kullanıcı girişi ve parola sıfırlama sayfalarında bilinen ve güvenli kabul edilen teknikler kullanın. Kendi tekniğinizi yaratmayın.
  • Basit ama güvenli bir parola politikası belirleyin. (uzun ve rastgele parolalar, parola güvenliği için önemli)
  • Kullanıcı girişlerinde birden fazla doğrulama kullanın. (bankacılık uygulamalarında telefona gönderilen doğrulama mesajı gibi)

Servis Dışı Bırakma Koruması

  • Servis dışı bırakma saldırılarının sitenizi zayıflatmaması için yavaş olan APIlarınızda ve kullanıcı girişi ile alakalı APIlarınızda erişim limiti kullanın (bir kişi dakikada 5 kere erişebilir gibi) ve kullanıcı girişi sayfalarında CAPTCHA kullanın.
  • Kullanıcı istek ve cevaplarında limitler kullanın.
  • CloudFlare gibi Servis Dışı Bırakma koruması kullanın.

Web Trafiği

  • Sitenizin tamamında TLS kullanın. İsteklerin hepsinde HTTPS ve "strict-transport-security" başlığını kullanın.
  • Çerezler "httpOnly" olmalı ve dizin ve domain sınırlı olmalı.
  • Kullanıcı cevaplarında X-Frame-Option, X-XSS-Protection başlıklarını kullanın.
  • HSTS cevaplarının TLS kullanmasını sağlayın. HTTP isteklerini HTTPS olarak yönlendirdiğinizden emin olun.
  • Bütün formlarda CSRF (Siteler arası istek sahtekarlığı) token kullanın. Aynı zamanda cevap olarak gelen çerezlerde SameSite başlığını kullanmanız CSRF riskini tamamıyla ortadan kaldıracaktır.

API Güvenliği

  • APIleriniz üzerindeki hiçbir kaynağın incelenebilir olmadığından emin olun.
  • APIlerinizi kullanan kullanıcıların yetkilerinin ve izinlerinin tam olduğundan emin olun.
  • Illegal ya da normal olmayan isteklere karşı kontroller yapın.

Doğrulama ve Karakter Kodlama

  • Kullanıcı tarafında girdi doğrulama yapın fakat kesinlikle güvenmeyin. Kullanıcı girdisini göstermeden önce kesinlikle karakter kodlamadan ve doğrulamadan geçirin.
  • Whitelist (sadece izin verilen girdilerin kabul edilmesi) yöntemiyle kullanıcı girdilerinin her parçasını kontrol etmeyi unutmayın. SQL sorgularında ya da sunucu tarafında çalışan bir serviste kesinlikle güvenilmeyen kullanıcı girdilerine güvenmeyin. Kullanıcı girdilerini direkt olarak cevaplara kesinlikle enjekte etmeyin.

Bulut konfigürasyonu

  • Servislerin sadece ihtiyacı olan portları kullandığından emin olun. Servisler için standart olmayan portları kullanmanız da saldırganların işini az da olsa zorlaştıracaktır.
  • Sunucuların backend sunucuları ve özel servislerin dışarıya açık olmadığından emin olun.
  • Servislerin sadece minimal IP adres setlerinden veri kabul ettiğinden emin olun.
  • Sunucudan giden trafik üzerinde IP ve port trafik kısıtlaması yapın.
  • Uygulama geliştiriciler ve diğer işlemleri yapan kullanıcıların hesaplarının erişimlerini minimum seviyede tutun.
  • Parola ve erişim anahtarlarını düzenli aralıklarla değiştirin.

Altyapı

  • Otomatik olarak yazılımları güncelleyebileceğinizden ve güncelleme sırasında sistemlerin çalışır olacağından emin olun.
  • Terraform gibi araçlar yardımıyla altyapınızı oluşturun. Altyapınıza kod gibi davranın ve bir buton ile tekrar oluşturulabileceğinden emin olun. El ile oluşturulan herhangi bir kaynağa kesinlikle tolerans göstermeyin.
  • Bütün servisleriniz için merkezi bir giriş kullanın. Log erişimi ve yönetimi için SSH bağlantısı yapmanıza gerek olmasın.
  • Servis üzerindeki bir problemi çözmek haricinde o servise SSH bağlantısı yapıyor olmanız, önemli görevlerinizin otomasyona bağlanmamış olduğunu gösterir.
  • SSH portunu (port 22) açık bırakmayın. SSH kullanacağınız zaman da, anahtar ile giriş yapın. SSH'a parola ile bağlanmayın.
  • Bir saldırı tespit sistemi kullanın.
  • Kullanılmayan servis ve sunucuları kapatın.

Test

  • Tasarım ve implementasyonunuzu gözden geçirin
  • Sisteminize sızma testi uygulayın. Fakat dışarıdan üçüncü bir göze de sızma testi yaptırın.

Eğitim

  • Çalışanlarınızı sosyal mühendisliğin tehlikelerine karşı eğitin.

Son olarak, bir planınız olsun

  • Neye karşı kendinizi koruduğunuza dair bir tehdit modeliniz olsun. Potansiyel tehdit ve aktörler için bir öncelik listesi oluşturun.
  • Üzerinde çalıştığınız bir olay müdahale planınız olsun. Emin olun, bir gün ihtiyacınız olacak.