- Katılım
- 21 May 2024
- Konular
- 1,450
- Mesajlar
- 2,451
- Çözüm
- 7
- Online süresi
- 3mo 25d
- Reaksiyon Skoru
- 2,564
- Altın Konu
- 1,027
- Başarım Puanı
- 274
- Yaş
- 51
- MmoLira
- 36,853
- DevLira
- 110
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
PHP 8 ile Kilitli Kapılar: Güvenli Oturum (Session) Yönetimi Rehberi
Bir kullanıcının sitenize giriş yapmasını sağlayan, onun sepet bilgilerini tutan veya "Hoş geldin, Cevat" dememizi sağlayan şey nedir? Elbette oturum (session) yönetimi. Oturumlar, kullanıcının sitemizdeki dijital kimlik kartıdır.
Peki, bu kimlik kartını ne kadar güvende tutuyoruz? PHP 8, bu "kimlik kartlarını" çaldırmamamız için bize harika araçlar sunuyor. Gelin, sitemizin kapılarını nasıl daha sağlam kilitleyeceğimize bakalım.
1. Kural Kitabı: Oturumları Doğru Başlatmak
Daha session_start() dediğimiz anda, kuralları en baştan koymalıyız. PHP 8, bunu doğrudan session_start() içinde bir dizi (array) olarak yapmamıza izin veriyor.İşte "süper güvenli" bir başlangıç ayarı:
[CODE title="php"]session_start([
'cookie_secure' => true,
'cookie_httponly' => true,
'use_only_cookies' => true,
'cookie_samesite' => 'Strict',
]);[/CODE]
Peki bu sihirli kelimeler ne anlama geliyor?
- cookie_secure (true): Çerezler, sadece güvenli (HTTPS) bağlantı üzerinden gönderilir. Araya giren birinin (man-in-the-middle) çerezi okumasını engeller.
- cookie_httponly (true): JavaScript'in (document.cookie) oturum çerezinize erişmesini engeller. Bu, XSS saldırılarının çerezinizi çalmasını neredeyse imkansız hale getiren en kritik ayarlardan biridir.
- use_only_cookies (true): Oturum kimliğinin sadece çerezler aracılığıyla yönetilmesini zorunlu kılar. Saldırganların URL üzerinden (site.com?PHPSESSID=...) oturum kimliği göndermesini engeller.
- cookie_samesite ('Strict'): Çerezin sadece sizin sitenizden gelen taleplerle gönderilmesini sağlar. Başka bir siteden (örn: saldirgan.com) sizin sitenize yapılan gizli taleplerde çerez gönderilmez. Bu, CSRF saldırılarına karşı güçlü bir kalkandır.
2. Kilit Değiştirme: session_regenerate_id()
Session Fixation (Oturum Sabitleme) saldırısı, bir saldırganın size kendi oturum kimliğini (session ID) "yedirmesi" ve sizin o kimlikle giriş yapmanızı beklemesidir. Siz giriş yaptığınızda, saldırgan da o kimliği bildiği için sizin hesabınıza girmiş olur.Bunu engellemenin yolu çok basittir: Kullanıcı kimliğini doğruladığı (yani giriş yaptığı) anda veya yetkisini değiştirdiği (örn: admin paneline geçtiği) anda, ona yeni bir kilit vermelisiniz:
[CODE title="php"]// Kullanıcı adı ve şifre doğruysa...
// Giriş başarılı...
// HEMEN bunu yapın:
session_regenerate_id(true);
// 'true' parametresi, eski oturum dosyasını sunucudan siler.[/CODE]
Bu komut, eski oturum kimliğini çöpe atar ve kullanıcıya o an yepyeni, tertemiz bir kimlik verir. Saldırganın elindeki eski kimlik artık işe yaramaz.
3. Oturumu Açık Unutmayın: Zaman Aşımı (Timeout)
Kullanıcı sitenizde bir sekmeyi açık unutup bilgisayar başından kalkarsa ne olur? O oturumun sonsuza kadar açık kalması bir risktir.Varsayılan oturum ömrünü (genellikle 24 dakikadır) 30 dakikaya (1800 saniye) ayarlayabilirsiniz:
[CODE title="php"]// 30 dakika
ini_set('session.gc_maxlifetime', 1800);[/CODE]
Ekstra İpucu: Buna ek olarak, JavaScript kullanarak bir "hareketsizlik zamanlayıcısı" kurabilirsiniz. Kullanıcı 15 dakika boyunca fareyi oynatmazsa, otomatik olarak "Çıkış Yap" işlemi tetiklenebilir.
4. Kasayı Değiştirin: Güvenli Oturum Depolama
Çoğu PHP kurulumu, oturum verilerini sunucuda /tmp gibi genel bir klasörde, basit metin dosyaları olarak saklar. Eğer paylaşımlı bir hosting kullanıyorsanız veya sunucunuzda başka bir sitenin açığı varsa, bu dosyalar okunabilir!Daha güvenli ve performanslı bir yöntem, oturum verilerini Redis (süper hızlı bellek deposu) veya Veritabanı (MySQL, PostgreSQL) içinde saklamaktır.
5. Kapıyı Kapatıp Çıkın: session_destroy()
Kullanıcı "Çıkış Yap" butonuna bastığında, sadece $_SESSION dizisini boşaltmak veya çerezi silmek yetmez. Sunucudaki kaydı tamamen yok etmeniz gerekir.[CODE title="php"]// Kullanıcı "Çıkış Yap" dediğinde:
session_destroy();[/CODE]
Bu, sunucudaki oturum dosyasını (veya veritabanı kaydını) tamamen imha eder.
6. Oturuma Ne Koyduğunuza Dikkat Edin
Oturumlar da bir veritabanı gibidir: Asla körü körüne güvenmeyin.- Oturuma Yazarken (Input): Kullanıcıdan gelen bir veriyi ($_POST) oturuma yazacaksanız, mutlaka temizleyin.
[CODE title="php"]// Gelen veriyi temizle
$cleanInput = filter_input(INPUT_POST, 'input_field', FILTER_SANITIZE_STRING);
// Temiz veriyi oturuma yaz
$_SESSION['user_input'] = $cleanInput;[/CODE]
- Oturumdan Okurken (Output): Oturumdaki bir veriyi ekrana (echo) basacaksanız, XSS saldırılarına karşı mutlaka htmlentities kullanın.
[CODE title="php"]// Ekrana basarken filtrele
echo htmlentities($_SESSION['user_input'], ENT_QUOTES, 'UTF-8');[/CODE]
- Katılım
- 13 Ocak 2020
- Konular
- 1,420
- Mesajlar
- 9,975
- Çözüm
- 81
- Online süresi
- 1y 1mo
- Reaksiyon Skoru
- 7,262
- Altın Konu
- 309
- TM Yaşı
- 6 Yıl 4 Ay 24 Gün
- Başarım Puanı
- 393
- MmoLira
- 6,126
- DevLira
- 15
Kasayı Değiştirin bunun yerine daha teknik bir kelime ekleyelim
Peki bu sihirli kelimeler ne anlama geliyor? daha terimsel birşey koyalım ayarlar yada yapılandırma gibi
eski oturum kimliğini çöpe atar fantastik kelime olmuş biraz siler diyebiliriz aslında
Peki bu sihirli kelimeler ne anlama geliyor? daha terimsel birşey koyalım ayarlar yada yapılandırma gibi
eski oturum kimliğini çöpe atar fantastik kelime olmuş biraz siler diyebiliriz aslında







