PHP CSRF Token Oluşturma CSRF Açığına Karşı Güvenlik Fonksiyonları
Blog'a Dön

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

Buğra Şıkel

PHP CSRF saldırılarına karşı önlem


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.

Web sitesine mi ihtiyacınız var ?

Bunları da beğenebilirsiniz

Bir Web Siteye Sahip Olmanız İçin 10 Neden
10 Ekim 2022

Bir Web Siteye Sahip Olmanız İçin 10 Neden

Pazarda rekabet etmek istiyorsanız, çevrimiçi bir varlığa ve daha da önemlisi size uygun olarak tasarlanmış bir web sitesine sahip olmalısınız. Belki 10 yıl önce alaka…

Devamını Oku
Mikroservis Ödeme Akışlarında Çift Çekim (Double-Charge) Sızıntılarını Önlemek: Kafka Outbox ve Redis Idempotency
17 Mayıs 2026

Mikroservis Ödeme Akışlarında Çift Çekim (Double-Charge) Sızıntılarını Önlemek: Kafka Outbox ve Redis Idempotency

Dağıtık ödeme mimarilerinde çift çekim hatalarını sıfıra indirmek için PostgreSQL 15, Kafka Outbox Pattern ve Redis 7.2 ile idempotent tasarım stratejileri.

Devamını Oku
TensorRT 8.6 Explicit Quantization: Production Modellerinde INT8 Hassasiyet Kayıplarını İzole Etme
10 Mayıs 2026

TensorRT 8.6 Explicit Quantization: Production Modellerinde INT8 Hassasiyet Kayıplarını İzole Etme

TensorRT 8.6’da ONNX GraphSurgeon ve Polygraphy kullanarak Explicit Quantization ile INT8 aktivasyon sapmalarını nasıl izole edeceğinizi teknik detaylarıyla inceleyin.

Devamını Oku
AI Asistan