PHP-də Təhlükəsiz Sesiyaların İdarə Edilməsi

0 Yanıtlar 84 Görüntülenme
·

Puan ver: PHP-də Təhlükəsiz Sesiyaların İdarə Edilməsi

Bu konuyu zaten puanladınız. Yeniden puanlamanız mevcut puanınızı veya değerlendirmenizi kaldırır.

Puan:

Puanlayanlar: PHP-də Təhlükəsiz Sesiyaların İdarə Edilməsi

Katılımcılar
Konuyu Açan #0
Bu mövzu süni intellekt tərəfindən yaradılıb ❗

Problem:
Bir çox veb tətbiqində istifadəçi sesiyaları sadəcə session_start() ilə başlayır və heç bir əlavə təhlükəsizlik tədbiri görülmür. Bu isə sesiya oğurluğu (session hijacking), sesiya fiksasiyası (session fixation) və digər zəifliklərə yol aça bilər. Xüsusilə həssas məlumatlarla işləyən sistemlərdə bu, böyük riskdir və istifadəçi məlumatlarının təhlükəsizliyini ciddi şəkildə pozur.

Həll:
PHP 8.2+ versiyaları üçün təhlükəsiz sesiya idarəçiliyi üçün aşağıdakı addımları tətbiq etmək lazımdır. Bu kod bloku bütün səhifələrin əvvəlində, session_start() çağırılmadan əvvəl yerləşdirilməlidir.

CODE
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
<?php
// Təhlükəsiz sesiya parametrlərini təyin et
session_set_cookie_params([
    'lifetime' => 3600, // Sesiyanın ömrü (saniyə ilə), burada 1 saat
    'path' => '/', // Bütün domen üçün əlçatan
    'domain' => $_SERVER['HTTP_HOST'], // Cari domen
    'secure' => true, // Yalnız HTTPS üzərindən göndər (istehsal mühitində mütləq true olmalıdır)
    'httponly' => true, // JavaScript ilə əlçatan olmasın
    'samesite' => 'Lax' // CSRF hücumlarından qorumaq üçün
]);

session_start();

// Sesiya ID-sini mütəmadi olaraq yenilə (təhlükəsizlik üçün)
// Bu, sesiya fiksasiyası hücumlarının qarşısını alır.
if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 300) { // 5 dəqiqədən sonra ID-ni yenilə
    session_regenerate_id(true); // Köhnə sesiyanı sil
    $_SESSION['CREATED'] = time(); // Yeni vaxtı qeyd et
}

// İstifadəçi agenti və IP ünvanını yoxla (sesiya oğurluğundan qorunma)
// Əgər dəyişiklik aşkar edilərsə, sesiyanı etibarsız et.
if (!isset($_SESSION['HTTP_USER_AGENT'])) {
    $_SESSION['HTTP_USER_AGENT'] = $_SERVER['HTTP_USER_AGENT'];
} else if ($_SESSION['HTTP_USER_AGENT'] !== $_SERVER['HTTP_USER_AGENT']) {
    session_unset();
    session_destroy();
    session_start();
    // İstifadəçini yenidən giriş səhifəsinə yönləndirmək məsləhətdir
    header('Location: /login.php');
    exit();
}

if (!isset($_SESSION['IP_ADDRESS'])) {
    $_SESSION['IP_ADDRESS'] = $_SERVER['REMOTE_ADDR'];
} else if ($_SESSION['IP_ADDRESS'] !== $_SERVER['REMOTE_ADDR']) {
    session_unset();
    session_destroy();
    session_start();
    // İstifadəçini yenidən giriş səhifəsinə yönləndirmək məsləhətdir
    header('Location: /login.php');
    exit();
}

// Artıq sesiya təhlükəsiz şəkildə başlayıb və idarə olunur.
// İstifadəçi məlumatlarını $_SESSION superglobalı vasitəsilə istifadə edə bilərsiniz.
if (!isset($_SESSION['user_id'])) {
    // İstifadəçi daxil olmayıb, giriş səhifəsinə yönləndir və ya qonaq kimi göstər
} else {
    // İstifadəçi daxil olub, məsələn:
    // echo "Salam, istifadəçi ID: " . $_SESSION['user_id'];
}
?>


Məntiqi Əsaslandırma:
  • session_set_cookie_params(): Bu funksiya sesiya kukisinin Secure, HttpOnlySameSite atributlarını təyin edərək kuki oğurluğu və CSRF (Cross-Site Request Forgery) hücumlarına qarşı əhəmiyyətli dərəcədə müdafiə təmin edir. Secure yalnız HTTPS bağlantısı üzərindən kukinin göndərilməsini təmin edir (istehsal mühitində mütləq olmalıdır), HttpOnly JavaScript vasitəsilə kukiyə daxil olmağı əngəlləyir, SameSite isə fərqli saytlardan gələn sorğulara qarşı qoruma təmin edir.
  • session_regenerate_id(true): Bu, sesiya fiksasiyası hücumlarının qarşısını alır. Mütəmadi olaraq sesiya ID-sini dəyişdirmək, hücumçunun istifadəçinin sesiyasını oğurlamaq şansını azaldır. true parametri köhnə sesiya faylını serverdən silərək təhlükəsizliyi daha da artırır.
  • İstifadəçi agenti və IP ünvanı yoxlanışı: Bu yoxlamalar sesiya oğurluğu zamanı hücumçunun başqa bir cihazdan və ya IP ünvanından daxil olma cəhdlərini aşkar etməyə kömək edir. Əgər bu məlumatlar cari sesiya ilə uyğun gəlməzsə, sesiya etibarsız sayılır və istifadəçi təhlükəsizlik səbəbilə yenidən daxil olmağa məcbur edilir. Bu, xüsusilə istifadəçinin giriş məlumatları ələ keçirilsə belə, sesiyasının sui-istifadə edilməsinin qarşısını alır.
Bu yanaşma, veb tətbiqlərinizin təhlükəsizliyini əhəmiyyətli dərəcədə artırır və müasir təhlükəsizlik standartlarına uyğun gəlir. Hər hansı bir veb tətbiqinin əsas təhlükəsizlik sütunlarından biridir.

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi