CodeBlanks Logo Icon CodeBlanks

Session fixation korunması

PHP kursu · Uzman · Ders 32/54

session_regenerate_id() ile oturum sabitleme saldırısına karşı korunmayı öğrenirsin.

Session fixation nedir?

Session fixation saldırısında saldırgan, kurbanın oturum kimliğini (session ID) önceden bilinen bir değere sabitler. Kurban giriş yaptığında saldırgan aynı kimliği kullanarak hesaba erişir. Korunma: giriş başarılı olduğunda session_regenerate_id(true) çağır; eski kimliği siler ve yeni rastgele bir kimlik üretir.

true parametresi eski oturum dosyasını da siler; false bırakırsan eski kimlik hâlâ geçerli olur. Çerez parametreleri de sertleştirilmeli: httponly ile JavaScript erişimi, samesite ile CSRF, secure ile yalnızca HTTPS kısıtlanır. Uygulama çerezleri için setcookie aynı bayraklarla çağrılır.

Çerez parametrelerini sertleştirme

session_set_cookie_params() bir dizi alır: lifetime, path, domain, secure, httponly ve samesite. samesite 'Strict' veya 'Lax' olmalı; Strict çapraz site taşımayı tamamen engeller, Lax üst düzey gezinmeye izin verir.

secure true çerezi yalnızca HTTPS üzerinden gönderir. httponly true document.cookie erişimini kapatır. session_regenerate_id(true) çağrısı bu ayarlardan sonra yapılırsa yeni kimlik sert çerezle gelir. session_get_cookie_params() ile mevcut değerleri okursun.

Uygulama Oturum kimliğini döndür

@session_start() ile oturumu başlat. $before = session_id() ile eski kimliği al. @session_regenerate_id(true) ile kimliği döndür, eski veriyi sil. $after = session_id() ile yeni kimliği al. Eski ve yeni kimlik farklı mı ve yeni kimlik boş değil mi diye kontrol et; her sonucu 1/0 olarak yazdır.

Örnek çözümü göster
@session_start(); $before = session_id(); @session_regenerate_id(true); $after = session_id(); yaz. $before !== $after daima true (1) ve strlen($after) > 0 daima true (1). echo ile iki satır yazdır.
Örnek çözüm:
<?php
@session_start();
$before = session_id();
@session_regenerate_id(true);
$after = session_id();
echo ($before !== $after ? "1" : "0") . "\n";
echo (strlen($after) > 0 ? "1" : "0") . "\n";

Kendini test et

  1. Session güvenlik kavramlarını eşleştir

    session_regenerate_id
    Kimliği yeniler
    httponly
    JavaScript'i engeller
    samesite
    CSRF'yi azaltır
    secure
    Yalnızca HTTPS
  2. session_regenerate_id(true)'nun true parametresi ne yapar?

    • Yeni kimliği uzatır
    • Oturumu hemen kapatır
    • Eski oturum verisini siler
    • HTTPS zorlaması yapar
    Cevabı göster

    Eski oturum verisini siler — Doğru. true parametresi eski oturum dosyasını siler; fixation tam kapanır.

  3. session_regenerate_id çağrısını tamamla

    ____(true);
    Cevabı göster
    session_regenerate_id(true);

Uzman bölümündeki tüm dersler