PHP Session(Oturum) Güvenliği

Günümüzde halen yazılımcıların geliştirdiği/yaptığı sistemler üzerinde bulunan ve site güvenliği dışı etkenler sayesinde kullanıcıların oturum açtığı ID numarası veya cookie(çerez) üzerinde PHP’nin verdiği isim ile PHPSESSID çalınabiliyor.

Peki nedir bu session yani oturum?

PHP’de session yani oturum kullanıcı bazlı sistemlerde örnek olarak database sorgusunda kullanıcı adı, şifre doğru ise oturum oluşturularak bu bilginin diğer php dosyalarında da okunması ve ona göre işlem yapılmasını amaçlar. Örnek verecek olursak :

<?php
session_start();
if($_SESSION["giris"]=="1") {
echo "Kullanıcı giriş yapmış.";
} else {
echo "Kullanıcı giriş yapmamış.";
}
?>

Yukarıdaki kod session_start fonksiyonu ile oturumu başlatıp siteye giren kişinin “giris” adlı oturumunu kontrol ediyor yani kısaca session yerel bir veri aktarımı sağlıyor diyebiliriz.

PHP o anki kişinin oturumunu nereden anlıyor veya nasıl buluyor?

PHP herhangi bir dosya üzerinde session_start fonksiyonu çalıştı ise siteye giren kişinin tarayıcısına “PHPSESSID” adlı bir cookie(çerez) oluşturur ve bu çerezin içerisinde bir değer vardır. Bu değer bir MD5 şifrelemesine benzemekte bu oturumu kapatmak için ise session_destroy fonksiyonu kullanılır.

Peki bu ne derece risk taşıyor?

Eğer farklı bir kullanıcı diğer kullanıcının “PHPSESSID” değerini biliyorsa o kişinin oturumunu çalar yani X kişisi kendi tarayıcısında Y kişisinin “PHPSESSID” çerezini girerse o kişinin oturumuna giriş sağlar bu yüzden yazdığınız sistemlerde işlem yapan kişi sitede başkasına kendi HTML kodunu çalıştıramamalı nedeni ise çok basit:

<script type="text/javascript">
var cerezler = document.cookie;
document.write(cerezler);
</script>

Javascript’in çerezlere erişimi var HTML çalışır ise Javascript ile çerezlere erişmek yani PHPSESSID değerine erişmek aşırı kolaydır.

Bunu nasıl engelleriz?

Oturumu güvende tutabilmek için kişiye session oluştururken session içinde bir veriye ip adresinide kayıt edin. Örnek olarak:

<?php
session_start();
if(isset($_POST["giris_yap"])) { // kişi giriş yap butonuna bastı varsayıyorum.
// burada database üzerinden kontrol yapıldığını varsayıyorum.

$_SESSION["giris_yapilan_kullanici"] = $_POST["kullanici_adi"]; // giriş yapılan kullanıcıyı session'a ekledik.
$_SESSION["giris_yapilan_ip"] = $_SERVER["REMOTE_ADDR"]; // giriş yapılan ip adresini session'a ekledik.
}
?>

Şimdi yukarıdaki kod üzerinde $_SESSION[“giris_yapilan_ip”] bizim çerez üzerinden PHPSESSID çalındığında başka bir ip adresinin ona girememesini sağlıyacak nasıl mı? Örnek olarak anasayfa.php dosyasına girildiğinde:

<?php
session_start();
$ip = $_SERVER["REMOTE_ADDR"]; // dosyaya giren kişinin ip adresi
$giris_yapilan_ip = $_SESSION["giris_yapilan_ip"];

if($ip!=$giris_yapilan_ip) { // Eğer sayfaya giren ip adresi oturumu açan ip adresiyle eşleşmiyorsa
session_destroy(); // session'u silelim.
die("IP Adresi değişikliği algılandı tekrardan giriş yapınız.");
}
?>

Yukarıdaki kod ile sayfaya giren kişi ile oturumu açan kişinin ip adreslerini kontrol ettik eşleşmiyorsa girilen oturumu bozduk yani gerekli güvenlik önlemlerimizi aldık.

Sizde gerekli önlemlerinizi alarak oturumları koruyabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir