Web Uygulama Güvenliği: OWASP Top 10 ve Korunma Yöntemleri
zafer ak
Yazar
OWASP Top 10 - 2024
OWASP (Open Web Application Security Project) her yıl en kritik web güvenlik risklerini listeler.
1. Broken Access Control
Yetkisiz erişim, en yaygın güvenlik açığı.
Örnekler
- URL manipulation: /user/123 → /user/456
- Role bypass
- IDOR (Insecure Direct Object Reference)
Korunma
// Laravel Policy kullanımı
public function view(User $user, Post $post)
{
return $user->id === $post->user_id;
}
// Controller'da
$this->authorize('view', $post);
2. SQL Injection
Veritabanı sorgularına zararlı kod enjekte etme.
Zaafiyetli Kod
// YANLIŞ!
$user = DB::select("SELECT * FROM users WHERE id = $id");
Güvenli Kod
// DOĞRU - Prepared statements
$user = DB::select("SELECT * FROM users WHERE id = ?", [$id]);
// Eloquent ORM kullan
$user = User::find($id);
3. Cross-Site Scripting (XSS)
Zararlı JavaScript kodunun çalıştırılması.
Korunma
// Blade otomatik escape eder
{{ $userInput }}
// Raw HTML gerekiyorsa dikkatli olun
{!! clean($userInput) !!}
// CSP Header
Content-Security-Policy: script-src 'self'
4. CSRF (Cross-Site Request Forgery)
Kullanıcı adına yetkisiz işlem yapma.
Korunma
// Laravel CSRF token
// SPA için
axios.defaults.headers.common['X-CSRF-TOKEN'] =
document.querySelector('meta[name="csrf-token"]').content;
5. Security Misconfiguration
- Debug mode production'da açık
- Default credentials
- Gereksiz servisler aktif
- Missing security headers
Güvenlik Headers
// Laravel middleware
return $response
->header('X-Frame-Options', 'DENY')
->header('X-Content-Type-Options', 'nosniff')
->header('X-XSS-Protection', '1; mode=block')
->header('Strict-Transport-Security', 'max-age=31536000');
6. Injection Attacks
SQL dışında: LDAP, OS Command, XML injection.
// Command injection - YANLIŞ
exec("convert " . $filename);
// DOĞRU - Escapeshellarg
exec("convert " . escapeshellarg($filename));
7. Authentication Failures
- Zayıf şifre politikası
- Brute force koruması yok
- Session fixation
Korunma
// Laravel rate limiting
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by($request->ip());
});
// Strong password
Password::min(8)
->mixedCase()
->numbers()
->symbols();
8. Sensitive Data Exposure
- HTTPS kullanın
- Hassas verileri şifreleyin
- PCI DSS uyumu (kredi kartı)
Güvenlik Checklist
✅ HTTPS zorunlu
✅ Prepared statements
✅ Input validation
✅ Output encoding
✅ CSRF tokens
✅ Security headers
✅ Rate limiting
✅ Strong authentication
✅ Audit logging
✅ Regular updates
Sonuç
Güvenlik, sonradan eklenen bir özellik değil, tasarımın temel parçası olmalıdır. Defense in depth yaklaşımıyla çok katmanlı koruma sağlayın.