CSRF Token ile Form Güvenliği
Güvenlik üzerinde çalışırken CSRF Token ile Form Güvenliği konusunu doğru kavramak hem zaman kazandırır hem de ileride çıkabilecek sorunların önüne geçer. Aşağıda konunun özünü 5 başlık altında topladık.
Güvenlik üzerinde çalışırken CSRF Token ile Form Güvenliği konusunu doğru kavramak hem zaman kazandırır hem de ileride çıkabilecek sorunların önüne geçer. Aşağıda konunun özünü 5 başlık altında topladık.
Konuya genel bakış
CSRF (siteler arası istek sahteciliği) saldırısında kullanıcı başka bir siteyi gezerken, tarayıcısı farkında olmadan sizin sitenize oturum çerezleriyle istek gönderir: şifre değişir, sipariş verilir, kayıt silinir. Her forma eklenen ve oturuma bağlı rastgele bir belirteç bu isteklerin sahte olduğunu anlamanın en güvenilir yoludur.
Bilmeniz gereken 5 temel nokta
- Rastgele ve oturuma bağlı: Belirteç random_bytes ile üretilir ve oturumda saklanır.
- hash_equals: Karşılaştırma sabit sürede yapılır, zamanlama saldırısına açık kapı bırakılmaz.
- Yalnız değişiklik yapan istekler: GET istekleri veri değiştirmemeli; belirteç POST, PUT ve DELETE için zorunlu olmalı.
- SameSite çerezi: Oturum çerezinde SameSite=Lax ek bir savunma katmanı sağlar.
- AJAX: Belirteç meta etiketinden okunup X-CSRF-Token başlığıyla gönderilebilir.
PHP ile uygulama
Aşağıdaki PHP örneği, yukarıdaki noktaların gerçek bir kodda nasıl bir araya geldiğini gösteriyor:
session_start();
if (empty($_SESSION['csrf'])) $_SESSION['csrf'] = bin2hex(random_bytes(32));
// Formda
echo '<input type="hidden" name="csrf" value="' . htmlspecialchars($_SESSION['csrf']) . '">';
// İşlemde
if ($_SERVER['REQUEST_METHOD'] === 'POST'
&& !hash_equals($_SESSION['csrf'], (string)($_POST['csrf'] ?? ''))) {
http_response_code(419);
exit('Oturum süresi doldu, sayfayı yenileyip tekrar deneyin.');
}Kodu doğrudan kopyalamak yerine her satırın ne yaptığını anlayarak uyarlamanız, ileride çıkacak hataları çözmeyi kolaylaştırır.
PHP 8 ile gelen match ifadesi ve isimli argümanlar, uzun switch ve parametre listelerini daha okunur hâle getirir.
Avantajları
CSRF Token ile Form Güvenliği konusunu doğru uygulamanın başlıca kazanımları şunlar:
- Saldırı yüzeyini daraltır ve olası veri sızıntılarının önüne geçer
- Güvenlik denetimlerinden daha kolay geçen bir kod tabanı sağlar
- Hataların canlı ortama çıkmadan fark edilmesine yardım eder
- Kullanıcı güvenini ve marka itibarını korur
Son söz
CSRF Token ile Form Güvenliği konusunda ele aldığımız 5 nokta, günlük çalışmada en sık ihtiyaç duyulan kısmı kapsıyor. Özellikle Rastgele ve oturuma bağlı ve AJAX başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.
İlgili içerikler:
- Google Authenticator ile İki Adımlı Doğrulama (TOTP) Nasıl Çalışır?
- PHP PDO ile SQL Injection Koruması
- PHP ile Güvenli Dosya Yükleme: 8 Kontrol
Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.
Yazar
Ferdi Giden @adminPHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.