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)
- $name : Bu parametreye cookie’nin adını veririz. Cookie bu isimle çağırılır.
- $value : Cookie’nin tutacağı değeridir.
- $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)
- $path : Sitede hangi dizin içerisinde çalışması gerektiğini belirtir. Bütün sitede aktif olunması istenir ise ” / ” değeri girilir.
- $domain : Cookie’nin hangi alt domain üzerinde çalışacağını belirtir. Boş bırakılırsa tüm site üzerinde etkili olur.
- $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.
- $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.
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. :)