PDA

Tüm Versiyonu Göster : Kusursuz Cookie Güvenliği


ProfessoR_X
22-05-06, 17:32
Hemen örnek kodlari yazarak basliyorum. Açiklamayi satir satir yapacagim.



<?php

/*
* Cookie güvenligi Ahmet Antmen tarafindan gelistirilmistir.
* Sorulariniz için e-posta adresim: ahmetantmen_at_msn_dot_com
*
*/

$bent = '--';
$benzersiz = 'Ju?hG&F0yh9?=/6*GVfd-d8u6f86hp';
$kimlik = 'HoiraT '.md5('123456789');

setcookie('Kimlik', $kimlik.$bent.md5($kimlik.$benzersiz));

if ($_COOKIE) {
$kes = explode($bent, $_COOKIE['Kimlik']);
if (md5($kes[0].$benzersiz) === $kes[1]) {
$_COOKIE['Kimlik'] = $kes[0];
} else {
die('Cookie içerigi degistirilmis.');
}
}

echo $_COOKIE['Kimlik'];

?>



Simdi neler yaptik tek tek görelim.

$bent = '--';
Bu, cookie'nin tasimasi gereken gerçek veri ile veri güvenligini saglayacak dogrulama kodunu ayirmak içindir. Daha sonra yine bu ayirici sayesinde veri ile dogrulama kodunu karsilastiracagiz.

$benzersiz = 'Ju?hG&F0yh9?=/6*GVfd-d8u6f86hp';
Burada sitemize özel benzersiz bir anahtar tanimliyoruz. Bu anahtar ne kadar karisik olursa o kadar iyi. Bu anahtar sayesinde cookie'nin kimlik verimizi tasiyan bölümü degistirilirse geçerli olabilmesi için yeni bir hash olusturulmasi gerektigi saldirgan tarafindan farkedilse bile site anahtarinizi bilemeyecekleri için yeni hash olusturulamayacaktir.

if ($_COOKIE)
Buradan itibaren kontrolleri yapacagiz. Veriyi, $_COOKIE['Kimlik'] olarak çektigimizde alacagimiz sonuç

HoiraT+25f9e794323b453885f5181f1b624d0b--8bf1946b393516a8946d3d8d78e26b24

olacaktir. Ayiricinin sol tarafinda kullanacagimiz veri, sag tarafinda ise verinin kontrollerini yapacagimiz anahtar mevcut.

$kes = explode($bent, $_COOKIE['Kimlik']);
Bu kod ile veri ve kontrol anahtarini aliyoruz. $kes[0] olarak çagirdigimizda kullanacagimiz kimlik verisine, $kes[1] olarak çagirdigimizda ise kontrol anahtarina ulasiriz.

if (md5($kes[0].$benzersiz) === $kes[1])
Kontol su sekilde yapiliyor; Cookie ile birlikte geri gelen veriyi sitemizin benzersiz dogrulama kodu ile yeniden md5liyoruz. Bunu yapinca elde edecegimiz hash cookie ile birlikte gönderdigimizle ayni olmali. Aksi taktirde cookie üzerinde oynama yapilmistir.

$_COOKIE['Kimlik'] = $kes[0];
Bu kod ile dogrulama saglanmis oldugundan cookie'ye kullanmak üzere içerigini aktariyoruz. $kes[0] kullanacagimiz veriyi tasiyordu!

else { die('Cookie içerigi degistirilmis.');
Eger yeniden olusturdugumuz hash ile cookieden gelen hash birbirini tutmuyorsa veri degistirilmistir. O halde bu eylemi durdurmamiz gerekiyor. Ben basitce scripti durdurdum. Siz IP ban yada dilediginiz baska bir islemi yapmakta serbestsiniz.

echo $_COOKIE['Kimlik'];
Bunuda scriptin çalisip çalismadiginiz basitçe gözlemleyebilmeniz için yazdim. Elbette siz burada, güvenligi saglanmis cookie den gelen veriyi isleyeceksiniz.


Gördügünüz gibi kod son derece basit, aslinda bütün güzelligi burada çünkü basit olan sey her zaman amacini daha iyi gerçeklestirir. Kod daha karmasik kontroller içerebilir, bu durumda hata tasima ihtimalide yükselecektir. Bu arada sayfalarinizda oturum kullaniyorsaniz PHPSESSID isimli cookienin bu islemlere tabii tutulmamasi için bir kod yazmaniz gerekir. Veya biraz daha arastirma yaparak oturum bilgilerinin veritabaninda saklanmasini saglayacak bir kod gelistirebilirsiniz. En sagliklisida bu olur!

[Hoirat[d0gma]]