Bu kontrol listesi, özel bir güvenlik ekibi olmaksızın bir web uygulamasını hızlı ve kapsamlı biçimde güvenli hale getirmesi gereken girişim kurucuları, geliştiriciler ve teknik liderler için tasarlanmıştır. Kullanıcılarınızı, verilerinizi ve itibarınızı en yaygın ve zararlı web tehditlerinden korumak için bu adımları izleyin.
Her Yerde HTTPS Zorunlu Kılın
Şifrelenmemiş HTTP trafiği, kullanıcılarınızı dinleme, kimlik bilgisi hırsızlığı ve ortadaki adam saldırılarına karşı savunmasız bırakır. Her sayfa ve her API uç noktası HTTPS üzerinden sunulmalıdır. Sensagraph, sitenizin HTTPS'yi zorunlu kılıp kılmadığını ve TLS yapılandırmanızın güvenli olup olmadığını otomatik olarak kontrol eder.
- Güvenilir bir Sertifika Otoritesi'nden TLS sertifikası edinin (Let's Encrypt ücretsiz ve yaygın biçimde güvenilirdir).
- Web sunucunuzu, tüm HTTP isteklerini (80 numaralı port) 301 kalıcı yönlendirme ile HTTPS'ye (443 numaralı port) yönlendirecek şekilde yapılandırın.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadbaşlığını ekleyerek HTTP Strict Transport Security (HSTS) etkinleştirin.- HTTPS kurulumunuzdan emin olduktan sonra hstspreload.org üzerinden domaininizi HSTS ön yükleme listesine gönderin.
- Eski TLS sürümlerini (TLS 1.0 ve 1.1) devre dışı bırakın; yalnızca TLS 1.2 ve TLS 1.3'ü destekleyin.
- Sunucu yapılandırmanızda zayıf şifre paketlerini (örn. RC4, 3DES, NULL şifreleri) devre dışı bırakın.
- TLS sertifikanızın sona ermeden önce yenilenmesini sağlayın — otomatik yenileme kullanın (örn. cron görevi veya systemd zamanlayıcısı ile Certbot).
- Tüm karma içeriklerin (HTTPS sayfalarında yüklenen HTTP kaynakları) ortadan kaldırıldığından emin olun.
Kimlik Doğrulama ve Oturum Yönetimini Güvenli Hale Getirin
Zayıf kimlik doğrulama, en çok istismar edilen saldırı vektörlerinden biridir. Doğru şekilde uygulanmış giriş sistemleri ve oturum yönetimi, hesap ele geçirme riskini önemli ölçüde azaltır.
- En az 12 karakter uzunluğunda minimum parola uzunluğu zorunlu kılın; parolaları bilinen ihlal edilmiş parola listeleriyle karşılaştırmayı düşünün (örn. HaveIBeenPwned API'si aracılığıyla).
- Parolaları bcrypt, scrypt veya Argon2 gibi güçlü ve yavaş bir karma algoritmasıyla hashleyin. Parolalar için asla MD5 veya SHA-1 kullanmayın.
- Çok faktörlü kimlik doğrulama (MFA) uygulayın — en azından TOTP tabanlı MFA sunun (örn. Google Authenticator aracılığıyla) ve yönetici hesapları için zorunlu hale getirmeyi düşünün.
- Kaba kuvvet saldırılarını önlemek için giriş denemelerini hız sınırlayın; tekrarlanan başarısız denemelerden sonra hesapları geçici olarak kilitleyin ve kullanıcıyı uyarın.
- Kriptografik açıdan güvenli bir rastgele sayı üreticisi ile oturum tokenleri oluşturun; en az 128 bit entropi sağlandığından emin olun.
- Oturum çerezlerini
HttpOnly,SecureveSameSite=Strict(veyaLax) öznitelikleriyle ayarlayın. - Çıkış yapıldığında oturum tokenlerini sunucu tarafında geçersiz kılın; yalnızca istemci tarafında çerezi silmeye güvenmeyin.
- Risk düzeyinize uygun mutlak ve boşta kalma oturum zaman aşımları uygulayın (örn. hassas uygulamalar için 30 dakikalık boşta kalma zaman aşımı).
- Sıfırdan özel SSO oluşturmak yerine üçüncü taraf kimlik doğrulaması için OAuth 2.0 / OpenID Connect kullanın.
- Parola sıfırlama akışlarını koruyun: doğrulanmış bir e-posta adresine gönderilen kısa ömürlü, tek kullanımlık tokenler kullanın; asla parolaları düz metin olarak göndermeyin.
Enjeksiyon Saldırılarını Önleyin (SQL, NoSQL, Komut, LDAP)
Enjeksiyon açıkları her web güvenlik riski listesinin başında yer almaktadır. Tek bir parametresiz sorgu, tüm veritabanınızı ifşa edebilir veya yok edebilir. Bunlar tartışmasız düzeltmelerdir.
- Her veritabanı etkileşimi için parametreli sorgular veya hazırlanmış ifadeler kullanın — kullanıcı girdisini SQL dizelerine asla birleştirmeyin.
- ORM'leri (Nesne-İlişkisel Eşleyici) dikkatli kullanın; ORM'ler bile ham sorgular üretmek için yanlış kullanılabilir, bu nedenle ham sorgu yöntemlerini denetleyin.
- Tüm kullanıcı girdilerini sunucu tarafında doğrulayın: işlemeden önce tür, uzunluk, format ve aralığı kontrol edin.
- Kötü karakterleri kara listeye almak yerine, mümkün olduğunca beklenen girdi değerlerini beyaz listeye alın.
- Çapraz Site Betikleme (XSS) saldırılarını önlemek için çıktıyı işlendiği bağlama göre doğru şekilde kodlayın (HTML, JavaScript, CSS, URL).
- Kullanıcı tarafından sağlanan verileri işletim sistemi kabuk komutlarına geçirmekten kaçının; kaçınılmazsa katı izin listeleri ve kabuk kaçış işlevleri kullanın.
- NoSQL sorgularını (MongoDB vb.) operatör enjeksiyonu için inceleyin; değerlerin yanı sıra anahtarları da doğrulayın ve temizleyin.
- Yeni kodla tanıtılmış olabilecek enjeksiyon noktalarını tespit etmek için düzenli olarak otomatik taramalar çalıştırın. Sensagraph, yaygın enjeksiyon açıklarını sürekli olarak tarar.
HTTP Güvenlik Başlıklarını Sertleştirin
Güvenlik başlıkları, tarayıcılara tehlikeli davranışları reddetmesini söyleyen hızlı ve düşük çabalı bir savunma katmanıdır. Pek çok girişim bunları tamamen atlıyor — siz atlamayın. Sensagraph, her taramada temel güvenlik başlıklarının varlığını ve doğruluğunu kontrol eder.
- Hangi kaynaklardan betik, stil, resim ve diğer kaynakların yüklenebileceğini kısıtlamak için bir İçerik Güvenlik Politikası (CSP) başlığı ayarlayın. Katı bir politikayla başlayın ve gerektiğinde gevşetin:
Content-Security-Policy: default-src 'self'; - Sayfalarınızın diğer sitelerdeki iframe'lere gömülmesini önlemek için
X-Frame-Options: DENY(veyaSAMEORIGIN) ekleyin (tıklama hırsızlığı savunması). - Tarayıcıların yanıtları bildirilen içerik türünden farklı bir MIME türü olarak algılamasını önlemek için
X-Content-Type-Options: nosniffekleyin. - İsteklerle ne kadar referans bilgisi gönderildiğini kontrol etmek için
Referrer-Policy: strict-origin-when-cross-originayarlayın. - Uygulamanızın kullanmadığı tarayıcı özelliklerini devre dışı bırakmak için
Permissions-Policy(eski adıyla Feature-Policy) ekleyin (örn. kamera, mikrofon, konum). - Saldırganlara teknoloji yığınınızı açığa çıkaran sunucu banner başlıklarını (
Server,X-Powered-By,X-AspNet-Version) kaldırın veya gizleyin. - Başlıklarınızı securityheaders.com kullanarak test edin ve A veya A+ derecelendirmesi hedefleyin.
Bağımlılıkları ve Üçüncü Taraf Kütüphaneleri Yönetin
Modern web uygulamalarının büyük çoğunluğu üçüncü taraf koddan oluşmaktadır. Bir npm paketindeki, Python kütüphanesindeki veya JavaScript CDN bağımlılığındaki bir açık, kendi kodunuz mükemmel olsa bile tüm uygulamanızı tehlikeye atabilir.
- Projenizin tüm doğrudan ve geçişli bağımlılıklarının güncel envanterini tutun.
- Yığınınıza göre
npm audit(Node.js),pip audit(Python),bundler-audit(Ruby) veya eşdeğerini çalıştırın ve kritik ve yüksek önemdeki bulguları hemen düzeltin. - Kod üretime ulaşmadan önce açıkların yakalanması için bağımlılık taramasını CI/CD ardışık düzeninize entegre edin.
- Bağımlılık sürümlerini kilit dosyalarınızda (
package-lock.json,Pipfile.lockvb.) sabitleyin ve çekme isteklerinde bu dosyalardaki değişiklikleri inceleyin. - Subresource Integrity (SRI) öznitelikleri olmaksızın harici CDN'lerden doğrudan üçüncü taraf JavaScript yüklemekten kaçının;
<script>ve<link>etiketlerineintegrityvecrossoriginözniteliklerini ekleyin. - Kullanıcılarınızın verilerine erişim izni vermeden önce üçüncü taraf satıcı ve hizmetleri kendi güvenlik uygulamaları açısından değerlendirin.
- Bağımlılıklarınızdaki yeni açıklar hakkında sizi bilgilendirmek için otomatik uyarılar (örn. GitHub Dependabot veya Snyk) kurun.
- Kullanılmayan bağımlılıkları kaldırın — her ekstra paket potansiyel bir saldırı yüzeyidir.
Erişimi Kontrol Edin ve En Az Ayrıcalık İlkesini Uygulayın
Her kullanıcı, hizmet hesabı ve API anahtarı yalnızca görevini yapmak için gereken minimum izinlere sahip olmalıdır. Aşırı ayrıcalıklı hesaplar saldırganların favori hedefidir — bir kez ele geçirildiklerinde maksimum hasara yol açarlar.
- Rol Tabanlı Erişim Kontrolü (RBAC) uygulayın: roller tanımlayın (örn. görüntüleyici, düzenleyici, yönetici) ve her birine gereken minimum izinleri atayın.
- Uygulamanızda asla root veya süper kullanıcı veritabanı kimlik bilgileri kullanmayın; yalnızca ihtiyaç duyduğu belirli tablolarda SELECT, INSERT, UPDATE, DELETE iznine sahip özel bir veritabanı kullanıcısı oluşturun.
- API anahtarlarını, sırları ve kimlik bilgilerini düzenli olarak değiştirin. Artık gerekmeyen her şeyi iptal edin.
- Sırları özel bir sır yöneticisinde saklayın (örn. HashiCorp Vault, AWS Secrets Manager veya güvenli bir CI sisteminde ortam değişkenleri) — asla kaynak koduna sabit kodlamayın veya sürüm kontrolüne yükleyin.
- Yanlışlıkla aktarılmış sırlar için kod tabanınızı ve git geçmişinizi git-secrets veya truffleHog gibi araçlarla denetleyin.
- Operasyonel açıdan uygulanabilir olan her yerde yönetim arayüzlerine ve panolarına IP izin listesi uygulayın.
- Tüm yönetici düzeyindeki hesaplar ve üretim sistemlerine erişimi olan hesaplar için MFA zorunlu kılın.
- Çalışanlar, yükleniciler ve hizmetler için artık gerek duyulmayan erişimi derhal gözden geçirin ve iptal edin (çıkış süreci).
Hassas Verileri Koruyun
Veri ihlalleri, bir girişimin karşılaşabileceği en yıkıcı olaylar arasındadır — finansal, hukuki ve itibar açısından. Hassas verilerle başından itibaren özenle ilgilenmek, bir ihlalin sonuçlarıyla başa çıkmaktan çok daha ucuzdur.
- Uygulamanızın işlediği tüm hassas verileri tanımlayın ve sınıflandırın: kişisel bilgiler, ödeme verileri, sağlık verileri, kimlik bilgileri ve iş açısından kritik veriler.
- Bekleme sırasındaki hassas verileri AES-256 veya eşdeğeri ile şifreleyin; veritabanı şifrelemesinin depolama düzeyinde etkinleştirildiğinden emin olun.
- Aktarım sırasındaki hassas verileri şifreleyin (HTTPS kapsamında) ve dahili hizmetler arasında (dahili mikrohizmetler için bile karşılıklı TLS veya şifreli kanallar kullanın).
- İhtiyaç duymadığınız verileri saklamayın — veri minimizasyonu ilkelerini uygulayın. Toplamadığınız veri çalınamaz.
- Parolalar, tam kredi kartı numaraları, sosyal güvenlik numaraları veya oturum tokenleri gibi hassas alanları asla günlüğe kaydetmeyin — günlük kaydı ifadelerinizi denetleyin.
- Günlüklerde, hata mesajlarında ve analizlerde hassas verileri maskeleyin veya kısaltın (örn. kart numarasının yalnızca son dört hanesini gösterin).
- Bir veri saklama politikası tanımlayın ve belgeleyin; iş veya yasal yükümlülükleriniz tarafından artık gerektirilmeyen verileri silin.
- Ödeme kartı verilerini işliyorsanız PCI-DSS uyumluluğunu sağlayın (veya kapsamı en aza indirmek için Stripe gibi PCI uyumlu bir ödeme işlemcisi kullanın).
- Gizlilik politikanızın veri uygulamalarınızı doğru biçimde yansıttığından ve geçerli düzenlemelere (GDPR, KVKK vb.) uyduğundan emin olun.
Günlük Kaydı, İzleme ve Uyarı Uygulayın
Göremediğinizi savunamazsınız. Kapsamlı günlük kaydı ve gerçek zamanlı uyarılar, devam eden saldırıları tespit etmenize, olayları sonradan araştırmanıza ve denetçilere uyumu kanıtlamanıza olanak tanır.
- Tüm kimlik doğrulama olaylarını günlüğe kaydedin: başarılı girişler, başarısız girişler, parola sıfırlamaları, MFA zorluklarını ve hesap kilitlenmelerini — IP adresi, zaman damgası ve kullanıcı aracısı dahil.
- Tüm yetkilendirme başarısızlıklarını (kullanıcının görüntüleme iznine sahip olmadığı kaynaklara erişim) günlüğe kaydedin.
- Tüm yönetim eylemlerini günlüğe kaydedin: kullanıcı rolü değişiklikleri, yapılandırma değişiklikleri, veri dışa aktarmaları.
- Günlükleri kurcalamaya dayanıklı bir günlük yönetim sisteminde merkezileştirin (örn. bir SIEM veya Datadog, Splunk veya ELK yığını gibi yönetilen bir hizmet).
- Yüksek önemdeki olaylar için gerçek zamanlı uyarılar kurun: tek bir IP'den birden fazla başarısız giriş denemesi, ayrıcalık yükseltme, olağandışı veri dışa aktarma hacimleri veya beklenmedik coğrafyalardan erişim.
- Günlüklerin uyum gereksinimlerinize bağlı olarak yeterli bir süre boyunca saklandığından emin olun (genellikle 90 gün ile 1 yıl arasında).
- Günlüklerinizi koruyun — ele geçirilmiş bir uygulama hesabı tarafından silinemeyeceğinden veya değiştirilemeyeceğinden emin olun.
- Uyarıların gerçekten tetiklendiğini ve doğru kişilere ulaştığını onaylamak için uyarı ardışık düzeninizi düzenli olarak test edin.
Altyapınızı ve Dağıtım Ardışık Düzeninizi Sertleştirin
Sunucularınız, bulut yapılandırmanız veya CI/CD ardışık düzeniniz güvensizse uygulama düzeyinde güvenlik yeterli değildir. Saldırganlar yanlış yapılandırılmış bulut depolama alanını, açık yönetim portlarını ve ele geçirilmiş derleme sistemlerini rutin olarak istismar eder.
- Sunucularınızdaki gereksiz tüm hizmetleri devre dışı bırakın ve kullanılmayan tüm portları kapatın; bunu uygulamak için bir güvenlik duvarı kullanın (örn. AWS Güvenlik Grupları, GCP Güvenlik Duvarı Kuralları veya Linux'ta UFW).
- Yönetim arayüzlerini (SSH, veritabanı portları, yönetim panoları) asla doğrudan genel internete açmayın — VPN veya bastion sunucu kullanın.
- Sunucu erişimi için SSH anahtar tabanlı kimlik doğrulaması kullanın; parola tabanlı SSH girişini devre dışı bırakın (sshd_config'de
PasswordAuthentication no). - Sunucu işletim sistemlerinizi ve yüklü tüm paketleri güncel tutun; kritik yamalar için otomatik güvenlik güncellemelerini etkinleştirin.
- Hiçbir kovanın açıkça amaçlanmadıkça herkese açık okunabilir olmadığından emin olmak için bulut depolama izinlerini denetleyin (S3 kovaları, GCS kovaları, Azure Blob Depolama).
- Konteyner görüntülerini dağıtmadan önce bilinen açıklar için tarayın (örn. Docker Scout, Trivy veya Snyk Container kullanarak).
- Altyapı kodu kullanın (Terraform, Pulumi, CloudFormation) ve altyapı değişikliklerini uygulama kodu gibi çekme istekleri aracılığıyla inceleyin.
- CI/CD ardışık düzeninizi güvence altına alın: üretim dallarına kimlerin birleştirme yapabileceğini kısıtlayın, imzalı commit'ler kullanın ve derleme sırlarının günlüklerde açığa çıkmadığından emin olun.
- Bulut sağlayıcısı denetim günlüklerini etkinleştirin (AWS CloudTrail, GCP Cloud Denetim Günlükleri, Azure Monitor) ve şüpheli API çağrıları için uyarı verin.
Güvenlik Açıklarını Sürekli Tarayın
Güvenlik tek seferlik bir etkinlik değildir. Her gün kodunuzda, bağımlılıklarınızda ve yapılandırmanızda yeni açıklar keşfedilmektedir. Sürekli otomatik tarama, sorunları saldırganlardan önce bulmanızı sağlar ve güvenlik duruşunuzun sürekli bir ölçüsünü sunar.
- Web uygulamanızın ve herkese açık altyapınızın düzenli otomatik güvenlik taramalarını planlayın — en az haftalık, ideal olarak her dağıtımda.
- Bulguları önem derecesine göre sınıflandırın ve önceliklendirin: kritik ve yüksek önemdeki sorunları hemen düzeltin; orta ve düşük önemdeki öğeleri normal sprint döngünüzde planlayın.
- Yılda en az bir kez veya büyük mimari değişikliklerden sonra manuel sızma testi yapın — otomatik tarama insan uzmanlığını tamamlar ancak yerini almaz.
- Harici araştırmacıların güvenle size açıkları bildirebilmesi için sorumlu açıklama politikası veya hata ödül programı oluşturun.
- Güvenlik açığı giderme metriklerinizi zamanla takip ederek yatırımcılara, kurumsal müşterilere ve denetçilere iyileşen güvenlik duruşunu kanıtlayın.
- Sensagraph, siteniz geliştikçe yeni açıkları işaretleyerek web uygulamanızın sürekli otomatik taramasını sağlar ve manuel çaba gerektirmeksizin güvenlik duruşunuzu güncel tutar.