İlginizi Çekebilir
  1. Ana Sayfa
  2. PHP

PHP Cookie Kullanımı ve Güvenliği

PHP Cookie Kullanımı ve Güvenliği
PHP Cookie Kullanımı ve Güvenliği
+ - 0

Merhabalar, PHP Cookie Kullanımı ve Güvenliği yazım ile PHP notlarıma devam ediyorum. Bu yazımda sürekli gördüğümüz cookie yani çerezler nelerdir onlardan bahsetmeye ve PHP ile bunu nasıl kullanacağımızdan bahsedeceğim.

PHP Cookie Kullanımı ve Güvenliği

HTTP tanımlama bilgileri, modern İnternet için gereklidir, ancak gizliliğiniz için bir güvenlik açığıdır. Web’de gezinmenin gerekli bir parçası olarak HTTP tanımlama bilgileri, web geliştiricilerinin size daha kişisel, uygun web sitesi ziyaretleri sağlamasına yardımcı olur. Çerezler, web sitelerinin sizi, web sitesi girişlerinizi, alışveriş sepetlerinizi ve daha fazlasını hatırlamasını sağlar. Ama aynı zamanda suçluların gözetlemesi için özel bilgi hazinesi olabilirler.

 

Cookie Nedir?

Çerezler , bir bilgisayar ağını kullanırken bilgisayarınızı tanımlamak için kullanılan kullanıcı adı ve şifre gibi küçük veri parçaları içeren metin dosyalarıdır. HTTP tanımlama bilgileri olarak bilinen belirli tanımlama bilgileri, belirli kullanıcıları tanımlamak ve web’de gezinme deneyiminizi geliştirmek için kullanılır.

Bir çerezde saklanan veriler, bağlantınız üzerine sunucu tarafından oluşturulur. Bu veriler size ve bilgisayarınıza özel bir kimlikle etiketlenir. Çerez, bilgisayarınız ve ağ sunucusu arasında değiş tokuş edildiğinde, sunucu kimliği okur ve size özel olarak hangi bilgileri sunacağını bilir.

 

Farklı çerez türleri – Sihirli (Magic) Çerezler ve HTTP Çerezleri

  • Sihirli Çerezler – (Magic Cookies)
  • HTTP Çerezleri

“Sihirli Çerezler” , değişiklik yapılmadan gönderilen ve alınan bilgi paketlerini ifade eden eski bir hesaplama terimidir. Genellikle bu, bir işletmenin dahili ağı gibi bilgisayar veritabanı sistemlerinde oturum açmak için kullanılır. Bu kavram, bugün kullandığımız modern “çerez”den önce gelir.

HTTP Çerezleri, internette gezinmek için oluşturulmuş “sihirli tanımlama bilgisinin” yeniden tasarlanmış bir sürümüdür. Web tarayıcı programcısı Lou Montulli, 1994 yılında ilham kaynağı olarak “sihirli çerez” kullandı. Bir çevrimiçi alışveriş mağazasının aşırı yüklenmiş sunucularını düzeltmesine yardım ederken bu konsepti tarayıcılar için yeniden yarattı.

HTTP tanımlama bilgileri veya internet tanımlama bilgileri, özellikle İnternet web tarayıcılarının her kullanıcının oturumuyla ilgili bilgileri izlemesi, kişiselleştirmesi ve kaydetmesi için oluşturulmuştur. Bir “oturum” sadece bir sitede geçirdiğiniz zamanı ifade eder.

Yeni bir web sitesini ziyaret ettiğinizde sizi tanımlamak için çerezler oluşturulur. Web sitesinin verilerini depolayan web sunucusu, web tarayıcınıza kısa bir tanımlayıcı bilgi akışı gönderir.

Tarayıcı tanımlama bilgileri “ad-değer” – “name -value” çiftleri tarafından tanımlanır ve okunur. Bunlar, çerezlere nereye gönderileceğini ve hangi verilerin geri çağrılacağını söyler.

Sunucu, çerezi yalnızca web tarayıcısının onu kaydetmesini istediğinde gönderir. “Çerezlerin nerede saklandığını” merak ediyorsanız, basittir: web tarayıcınız sizi tanımlayan “ad-değer çiftini” hatırlamak için yerel olarak saklayacaktır.

Bir kullanıcı gelecekte bu siteye geri dönerse, web tarayıcısı bu verileri web sunucusuna bir çerez biçiminde döndürür. Bu, tarayıcınızın önceki oturumlarınızdan verileri geri çağırmak için sunucuya geri göndereceği zamandır.

 

PHP Cookie Kullanımı

Çerezlerin ne olduğunu öğrendiğimize göre PHP ile bu çerezleri nasıl yöneteceğimizi görelim.

Cookie Oluşturma

setcookie($name, $value, $time, $path, $domain, $secure, $just_http)
  1. $name : Bu parametreye cookie’nin adını veririz. Cookie bu isimle çağırılır.
  2. $value : Cookie’nin tutacağı değeridir.
  3. $time : Cookie’nin tarayıcıda ne kadar süre tutulacağının süresidir. Eğer bir süre verilmezse tarayıcı kapandığında cookie silinir.
    • Zaman değeri, şu anki zaman + aktif olacağı süre şeklinde verilebilir. (örnek: time() + 60 //60 saniye)
  4. $path : Sitede hangi dizin içerisinde çalışması gerektiğini belirtir. Bütün sitede aktif olunması istenir ise ” / ” değeri girilir.
  5. $domain : Cookie’nin hangi alt domain üzerinde çalışacağını belirtir. Boş bırakılırsa tüm site üzerinde etkili olur.
  6. $secure : True olarak aktif edilir ise sadece sadece HTTPS bağlantılarda PHP çerez kullanımı gerçekleşir. Güvenlik sağlamak için kullanılır.
  7. $just_http : True olarak verilirse Cookie’ye sadece sunucu üzerinden erişilebilir. Javascript ile tarayıcı üzerinde cookie düzenlenemeyecektir.

 

 

setcookie('Cookie_Adı', 'deger, time() + (60*5) , '/', 'mustafabukulmez.com', true, true);
// Cookie_Adı, deger içeriğine sahip 5 dakika (300 saniye) tarayıda aktif olacak, tüm yollarda, dizinlerde etkili, mustafabukulmez.com üzerinde etkili, sadece https bağlantılar üzerinden okunabilen, sadece http protokolü üzerinden erişimi olan, sunucu üzerinden değiştirilebilen bir cookie oluşturmuş olduk.

setcookie('Cookie_Adı', 'cookie_deger'); //tarayıcı kapandığında silinir

 

Cookie Silme

Cookie silmek oluşturmak ile aynı. Burada mantık cookie’nin süresini sıfırlamak oluyor. Böylece browser tarafından siliniyor.

 

setcookie('Cookie_Adı', '_', time() - 1); //′Cookie_Adı′ isimli çerezi sil

 

Cookie Okumak

Cookie’leri okumakta kolaydır.  Aşağıdaki gibi kullanabilirsiniz.

 

$_COOKIE['Cookie_Adı']  //’Cookie_Adı’ isimli çerezin değerini ver

 

Ek Cookike Güvenliği Sağlamak

Yukarıda her ne kadar bilgilerin değiştirilebilmesini engellemiş olsak da bu verinin içeriğinin görülmeyeceği anlamına gelmiyor. Eğer önemli bir veri tutuyorsak bu verinin üçüncü kişiler tarafından görülmesini asla istemeyiz.

Gelin bir güvenlik algoritması kuralım ve kullanalım. Burada hem adını hem de değerini şifreleyerek kaydedeceğiz. Şimdi bir php uzantılı dosya açtım ve hızlıca basit bir sayfa yaptım. Sonrada php kodlarımızı yazıyoruz.

 

<?php
error_reporting(0); // hatalari gosterme 
function encrypt_decrypt($action, $string) {
	if($action == 'encrypt') {
		return urlencode(base64_encode($string));
	}
	else if($action == 'decrypt'){
		return base64_decode(urldecode($string));
	}
}
function cookie($par){
	$par = encrypt_decrypt('encrypt',$par);
	if ($_COOKIE[$par]){	
		return encrypt_decrypt('decrypt',$_COOKIE[$par]);				
	}else {						
		return false;			
	}		
}
function set_cookie($name,$value,$time){
	$name = encrypt_decrypt('encrypt',$name);
	$value = encrypt_decrypt('encrypt',$value);
	return setcookie($name, $value, $time);
}
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>    
<?php
/*
	'UserName' değerinin şifrelenmiş hali = VXNlck5hbWU%3D
	'Mustafa BÜKÜLMEZ' değerinin şifrelenmiş hali = TXVzdGFmYSBCw5xLw5xMTUVa
*/
if (!cookie('UserName')){ //cookie yoksa cookie olustur
	set_cookie('UserName', 'Mustafa BÜKÜLMEZ', time() + 60*5);
	
}else{ //cookie varsa
	echo cookie('UserName'); //oku
} 
 ?>
</body>
</html>

Wampp veya Xampp hangisini kullanıyorsanız çalıştırın. Yukarıdaki kodları bir php dosyasına yazın ve dosyasını www klasörünüze atın.

Ben Wampp kullanıyorum. Benim için yol şöyle C:\\wamp64\www\deneme.php Sonra browseri açıyorum ve http://localhost:8080/deneme.php yazıp enter diyorum. Bu şekilde kodların çalıştığını görebilirsiniz.

Burada 3 metodumuz var.

set_cookie, bu metot şifrelenmiş yeni bir cookie oluşturmamızı sağlıyor. Yukarıda nasıl oluşturduğumuzu görmüştük. Burada şifreleme yaptığımız için aynı bir metot yazdık.
encrypt_decrypt, bu metot gelen değişkenin şifrelemesi yapıyor. base64_decode şifrelemeyi yapan ana php metottur
cookie, bu metoda göstemek istediğimiz cookie adını giriyoruz. Girilen ad şifreleniyor ve kontrol ediliyor. Aynı kodda şifrelenmiş bir cookie varsa ilgili cookie’nin içeriğinin şifresi çözülerek bize gönderiliyor.
Bende çıktı bu şekilde
PHP Cookie Kullanımı
Şimdi gelin bir de Google Chrome Ayarlar Çerez sayfasından, kaydettiğimiz çerezler nasıl görünüyor ona bakalım.
PHP Cookie Kullanımı
PHP Cookie Kullanımı yazımda bu kadardı arkadaşlar. Bu kodları projelerinizde kullanabilir ve cookie’lerinizin güvenliğini sağlayabilirsiniz.

Diğer yazılarımızda görüşmek üzere… Discord’a katılmayı unutmayın.

PHP Dersleri için başlattığım repoya bağlantıya tıklayarak ulaşabilirsiniz. Dersin kodları burada… :) Tüm PHP yazılarım için tıklayabilirsiniz.

Kodla kalın. :)

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)