Eğitim modülü
Yönettiğiniz web sitesini güvenceye almak
Site sahipleri için: HTTPS, güvenlik başlıkları, formlar, bağımlılıklar ve yönetici hesabı; her birinin kaldırdığı riske göre sıralı.
Sonunda neler yapabileceksiniz
- Web sitesi savunmalarını etkisine göre sıralayabilirsiniz.
- Eksik bir başlığın ne anlama geldiğini okuyabilirsiniz.
- Üç klasik girdi açığını ve onları önleyen tek alışkanlığı bilirsiniz.
Koddan değil, erişimden başlayın
Ele geçirilen küçük sitelerin çoğu akıllıca bir kod kusuruyla değil, zayıf yönetici parolasından, güncel olmayan bir eklentiden ya da sızmış bir anahtardan girildi. Bu yüzden ilk işler şunlardır: çok adımlı doğrulamalı, benzersiz bir yönetici parolası; olabilecek en az hesap; platform, tema ve eklentiler için otomatik güncelleme.
Her yerde HTTPS
Her sayfayı HTTPS üzerinden sunun, HTTP'yi ona yönlendirin ve tarayıcılar düz HTTP'yi hiç denemesin diye Strict-Transport-Security başlığı ekleyin. HTTP üzerinden yüklenen betik gibi karışık içerik güvenceyi bozar.
Güvenlik başlıkları
Başlıklar, sitenin tarayıcıya nasıl davranacağını söylemesini sağlar. Content-Security-Policy betiklerin nereden yüklenebileceğini sınırlar ve siteler arası betik çalıştırma açığının zararını azaltır. X-Content-Type-Options tarayıcının içerik türünü tahmin etmesini engeller; frame-ancestors yönergesi ya da X-Frame-Options başka sitelerin sizinkini çerçevelemesini önler; Referrer-Policy diğer sitelere gönderilenleri sınırlar. Oturum taşıyan çerezlerde Secure, HttpOnly ve SameSite nitelikleri bulunmalıdır. Bu bölümdeki başlık denetim aracı, yapıştırdığınız kümeyi kontrol eder ve her bulguyu açıklar.
Klasik girdi açıklarına karşı tek alışkanlık
SQL enjeksiyonu, siteler arası betik çalıştırma ve benzeri birçok açığın ortak nedeni vardır: kullanıcıdan gelen veri, komutun parçası sayılır. Önleyen alışkanlık, veriyi ve komutu ayrı tutmaktır. Veri tabanında parametreli sorgu kullanın, çıktıyı yerleştirildiği yere göre (HTML, öznitelik, URL) kodlayın ve girdiyi alanın tutması gereken değere göre doğrulayın. Çerçeveler, onları aşmadığınız sürece bunu varsayılan olarak yapar.
Erişim denetimi ve bağımlılıklar
Giriş yapmış kişinin istediği kaydı görmeye yetkili olduğunu sunucu tarafında denetleyin; bir düğmeyi gizlemek erişim denetimi değildir. Kullandığınız kitaplık ve eklentilerin listesini tutun ve güncelleyin; açığı olan bir bağımlılık, kendi kodunuz kadar savunmasızdır. Siteyi yedekleyin ve geri yüklemeyi sınayın.
Akılda kalacaklar
- Önce yönetici erişimi, güncelleme ve HTTPS; sonra başlıklar.
- Veriyi ve komutu ayrı tutun.
- Yetkiyi her zaman sunucuda denetleyin.
Kendinizi sınayın
Açıklamayı görmek için bir yanıt seçin. İstediğiniz zaman baştan başlayabilirsiniz.
1. Adresteki numara değiştirildiğinde ürün sayfası başka bir müşterinin siparişini gösteriyor. Bu hangi açıktır?
Sunucu siparişin isteyen kişiye ait olup olmadığını denetlemedi.
2. SQL enjeksiyonuna karşı en güvenilir savunma nedir?
Kullanıcı verisini sorgunun yapısından uzak tutarlar; belirtileri saklamak yerine nedeni ortadan kaldırırlar.
3. script-src içinde unsafe-inline bulunan bir Content-Security-Policy neden az koruma sağlar?
Politika, enjekte edilen betikleri durdurmak içindir; satır içi betiklere izin vermek bu etkiyi ortadan kaldırır.
Daha fazlası
Kaynaklar
Bu bölüm savunma ve öğrenme içindir. Sahibi olmadığınız ya da test etmek için yazılı izin almadığınız sistemleri denemeyin: bir bilişim sistemine hukuka aykırı olarak girmek suçtur (Türk Ceza Kanunu m. 243).