Faz 10: Güvenlik — Security Headers, Auth ve Rate Limiting
Neden Önemli?
Her 39 saniyede bir siber saldırı gerçekleşiyor. IBM'in 2024 raporuna göre bir veri ihlalinin ortalama maliyeti 4.88 milyon dolar. KOBİ'lerin %60'ı bir siber saldırıdan sonra 6 ay içinde kapanıyor. Web sitesi güvenliği artık IT departmanının değil, iş sürekliliğinin konusudur.
Google, HTTPS kullanımını sıralama faktörü olarak değerlendirmektedir. Ancak SSL sertifikası tek başına güvenlik sağlamaz. HTTP security headers, XSS koruması, CSRF token'ları ve rate limiting gibi katmanlı güvenlik önlemleri zorunludur.
OWASP Top 10 listesindeki yaygın güvenlik açıkları — injection, broken authentication, XSS, CSRF — hala web uygulamalarının büyük çoğunluğunda bulunmaktadır. Proaktif güvenlik, reaktif müdahaleden her zaman daha ucuzdur.
Kontrol Listesi
- Content-Security-Policy (CSP): Hangi kaynakların yüklenmesine izin verileceğini belirleyen detaylı politika — script-src, style-src, img-src, font-src, connect-src, frame-src direktifleri. Report-only modunda test edip production'da enforce edin.
- X-Frame-Options / frame-ancestors: Clickjacking saldırılarına karşı koruma —
DENYveyaSAMEORIGINayarı. CSP frame-ancestors ile eşdeğer modern koruma. - Strict-Transport-Security (HSTS): Tüm iletişimin HTTPS üzerinden gerçekleşmesini zorunlu kılan header — minimum 1 yıl max-age, includeSubDomains ve preload direktifleri.
- X-Content-Type-Options: MIME type sniffing saldırılarını engelleyen
nosniffdeğeri. - Referrer-Policy: Referrer bilgisinin ne kadarının paylaşılacağını kontrol eden politika —
strict-origin-when-cross-originönerilen değer. - Permissions-Policy: Kamera, mikrofon, geolocation, payment gibi tarayıcı özelliklerine erişimi kontrol eden politika.
- Rate limiting: API endpoint'leri ve form submission'lar için istek sınırlaması — brute force, DDoS ve abuse koruması. IP tabanlı ve kullanıcı tabanlı limitler.
- Authentication güvenliği: Güçlü şifre politikası, MFA (Multi-Factor Authentication), session yönetimi, token rotation, brute force koruması.
- XSS koruması: Input sanitization, output encoding, CSP nonce/hash kullanımı, DOM-based XSS tespiti. React/Next.js varsayılan olarak XSS koruması sağlar ama
dangerouslySetInnerHTMLdikkat gerektirir. - CSRF koruması: State-changing isteklerde CSRF token zorunluluğu, SameSite cookie attribute, Origin/Referer header kontrolü.
- Dependency güvenliği:
npm auditile düzenli güvenlik taraması, Dependabot/Snyk ile otomatik güvenlik güncellemesi, supply chain saldırı koruması. - Error handling: Production'da detaylı hata mesajları göstermeme (stack trace sızıntısı), özel hata sayfaları (404, 500), error logging (Sentry gibi).
Teknik Gereksinimler
Security headers konfigürasyonu (Next.js):
// next.config.ts
const securityHeaders = [
{
key: 'Content-Security-Policy',
value: [
"default-src 'self'",
"script-src 'self' 'nonce-{NONCE}' https://www.googletagmanager.com",
"style-src 'self' 'unsafe-inline'",
"img-src 'self' data: https:",
"font-src 'self' https://fonts.gstatic.com",
"connect-src 'self' https://www.google-analytics.com",
"frame-ancestors 'none'",
].join('; ')
},
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
{ key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' },
{ key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' }
];
Rate limiting (basit implementasyon):
// In-memory rate limiter (production'da Redis kullanın)
const rateLimitMap = new Map<string, { count: number; resetTime: number }>();
function rateLimit(ip: string, limit: number, windowMs: number): boolean {
const now = Date.now();
const record = rateLimitMap.get(ip);
if (!record || now > record.resetTime) {
rateLimitMap.set(ip, { count: 1, resetTime: now + windowMs });
return true;
}
if (record.count >= limit) return false;
record.count++;
return true;
}
// Kullanım: 15 dakikada max 100 istek
if (!rateLimit(clientIP, 100, 15 * 60 * 1000)) {
return new Response('Too Many Requests', { status: 429 });
}
CSRF token implementasyonu:
import { randomBytes } from 'crypto';
function generateCSRFToken(): string {
return randomBytes(32).toString('hex');
}
// Token'ı cookie'ye set et (httpOnly: false — JS okumalı)
// Her POST/PUT/DELETE isteğinde header'dan token'ı al ve cookie ile karşılaştır
Sık Yapılan Hatalar
- CSP'yi production'da test etmeden deploy etmek: Yanlış yapılandırılmış CSP, sitenin tamamen çalışmamasına neden olabilir. Önce
Content-Security-Policy-Report-Onlyile test edin. - Rate limiting'i sadece login'e uygulamak: API endpoint'leri, form gönderim sayfaları ve arama fonksiyonu da abuse edilebilir — tüm kritik endpoint'lere rate limiting ekleyin.
- npm audit uyarılarını göz ardı etmek: "Zaten çalışıyor" yaklaşımı, bilinen güvenlik açıklarını kasıtlı olarak göz ardı etmektir. Düzenli güncelleme disiplini şarttır.
- HTTPS'i yeterli görmek: SSL/TLS sertifikası transit güvenliğini sağlar ama uygulama katmanı güvenliğini garanti etmez. HSTS, CSP ve diğer header'lar ek katmanlar gerektirir.
- Error mesajlarında bilgi sızdırmak: "Kullanıcı bulunamadı" vs "Şifre yanlış" — saldırgana kullanıcı adının geçerli olduğunu söyler. Genel hata mesajı kullanın.
Profesyonel İpuçları
- SecurityHeaders.com ve Mozilla Observatory ile sitenizin güvenlik başlık puanını düzenli kontrol edin — A+ hedefleyin.
- Web Application Firewall (WAF) kullanın — Cloudflare, AWS WAF gibi servisler SQL injection ve XSS saldırılarını edge'de bloklar.
- Penetrasyon testi (pentest) yılda en az 1 kez yaptırın — otomatik tarayıcıların bulamadığı mantıksal açıkları uzman göz bulur.
- Subresource Integrity (SRI) kullanarak CDN'den yüklenen script'lerin bütünlüğünü doğrulayın — CDN kompromize edilse bile zararlı kod çalışmaz.
- Bug bounty programı başlatmayı değerlendirin — HackerOne gibi platformlar üzerinden güvenlik araştırmacılarının açıkları bildirmesini teşvik edin.
Bu İşleri Profesyonel Ekibimize Bırakın
Web sitenizin güvenlik altyapısı ve koruma optimizasyonunu uzman ekibimizle hızlı ve hatasız tamamlayın. VixSEO olarak her adımı sizin için planlıyoruz.
Bu makale faydalı oldu mu?