Buğra Şıkel
PHP CSRF Token Oluşturma CSRF Açığına Karşı Güvenlik Fonksiyonları

CSRF ya da XSRF Saldırısı Nedir?
XSRF ya da CSRF (İngilizce: cross-site request forgery, Türkçe: sitelerarası istek sahtekârlığı), internet sitelerini hedef alan kötü niyetli bir exploit türüdür. XSRF ile internet sitesinin güvendiği bir kullanıcı üzerinden, siteye izin verilmeyen ya da kullanıcının farkında olmadığı komutlar gönderilir. Kötü niyetli bir web sitesinin bu tür komutları iletebilmesinin birçok yolu vardır; örneğin özel olarak hazırlanmış resim etiketleri, gizli formlar ve JavaScript XMLHttpRequests, kullanıcının etkileşimi ve hatta bilgisi olmadan çalışabilir. Bir kullanıcının belirli bir siteye güveninden yararlanan siteler arası komut çalıştırmanın (İngilizce: cross-site scripting) aksine, CSRF bir sitenin kullanıcının tarayıcısında sahip olduğu güvenden yararlanır.
Bir CSRF saldırısında, masum bir son kullanıcı, bir saldırgan tarafından kandırılarak, istemedikleri bir web isteği gönderir. Bu, web sitesinde yanlışlıkla istemci veya sunucu veri sızıntısı, oturum durumunun değiştirilmesi veya bir son kullanıcının hesabının manipülasyonunu içerebilecek eylemlerin gerçekleştirilmesine neden olabilir.
CSRF ya da XSRF Saldırısı Nasıl Önlenir?
Bu saldırı türlerini CSRF token üreterek ve her türlü istek-request-lerde bu tokenları kontrol ederek, karşılaştırarak güvenlik önlemi alabiliriz. Bu sayede gerçek oturumun sahibindeki tokenlar eşleşmeyeceğinden dolayı saldırganın saldırılarını boşa çıkarmış oluyoruz.
İlk olarak oturum (session) işlemlerini başlatacağımız alanda $token değişkenimiz tanımlıyoruz.
session_start(); // oturumumuzu başlatıyoruz.
//CSRF token olup olmadığını kontrol ediyoruz, eğer yoksa token oturumumuzu oluşturup bu tokeni bir değişkene aktarıyoruz.
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];
Şimdi token değişkenimizi göndereceğimiz isteklerde gizli bir inputun içerisine yerleştiriyoruz. Ya da bunu ajax ile göndereceksek javascript değişkeni olarak da yazdırabilirsiniz.
<input type="hidden" name="token" value="<?= $token ?>" />
Şimdi sıra bu değişkeni gönderdiğimiz istek tarafında kontrol etmekte.
if (!empty($_POST['token'])) {
if (hash_equals($_SESSION['token'], $_POST['token'])) {
// Eğer oluşturduğumuz token'lar uyuşuyorsa yapmak istediğimiz işleme bu alanda devam edebiliriz.
} else {
// Eğer bir uyuşmazlık varsa burada işlemi öldürüp hatayı bastırıyoruz.
die("Erişim reddedildi!");
}
}
Yukarıdaki anlatımdaki işlemleri uygulayarak siz de kendinizi CSRF (XSRF) saldırılarına karşı koruyabilirsiniz.
Diğer yazılarıma göz atmak için tıklayın.
Bunları da beğenebilirsiniz

Üretim Hattında Otonom Eylemleri Senkronize Etmek İçin Dağıtık Konsensüs: Endüstriyel AI Kararları
Endüstriyel yapay zeka sistemlerinde otonom eylemleri güvenilir bir şekilde senkronize etmek için dağıtık konsensüs mekanizmalarının önemini ve uygulama yöntemlerini keşfedin. Üretim hattındaki verimliliği ve güvenliği artırmak için bu teknolojilerin nasıl kullanılabileceğini öğrenin.
Devamını Oku

REST API Tasarımında Offset mi Cursor Pagination mı? Veri Büyüklüğüne Göre Karar Matrisi
Milyar satırlık tablolarda API p99 gecikmesini 1400ms’den 45ms’ye düşüren pagination stratejileri. DB execution planları ve production trade-off analizi.
Devamını Oku

Contract Testing vs End-to-End: Mikroservislerde Entegrasyon Açmazı ve Test Piramidi
Mikroservis mimarisinde 45 dakikalık flaky E2E testlerinden, 15ms’lik Contract testlerine geçiş sürecini, Pact konfigürasyonlarını ve CI/CD trade-off’larını inceliyoruz.
Devamını Oku