ÇEREZ ÖZELLİKLERİ VE UYGULAMASI
Bir sunucu, bir istemciye bir HTTP nesnesi döndürürken, istemcinin saklayacağı bir durum bilgisi parçası da gönderebilir. Bu durum nesnesine, o durumun geçerli olduğu URL aralığının bir açıklaması dahildir. İstemci tarafından bu aralığa giren gelecekteki tüm HTTP istekleri, durum nesnesinin geçerli değerinin istemciden sunucuya geri iletimini içerecektir. Durum nesnesi, zorlayıcı bir neden olmaksızın çerez olarak adlandırılır .Bu basit mekanizma, web tabanlı ortamlar için bir dizi yeni uygulama türünün yazılmasını sağlayan güçlü ve yeni bir araç sağlar. Alışveriş uygulamaları artık seçili öğeler hakkında bilgi depolayabilir, ücret karşılığında servisler kayıt bilgilerini geri gönderebilir ve müşteriyi bir sonraki bağlantıda bir kullanıcı kimliğini yeniden yazmaktan kurtarabilir, siteler kullanıcı başına tercihleri istemcide saklayabilir ve müşteriyi tedarik edebilir o siteye her bağlandığında bu tercihler bir HTTP yanıtının parçası olarak bir Set-Cookie başlığı eklenerek istemciye bir tanımlama bilgisi tanıtılır , bu genellikle bir CGI betiği tarafından oluşturulur.
Çerezleri desteklemek için tarayıcıların aşağıdaki gereksinimleri karşılamasını gerektirir;
- 4.096 byte kadar büyük çerezleri destekleyebilir .
- Etki alanı başına (yani web sitesi başına) en az 50 çerezi destekleyebilir .
- Toplamda en az 3.000 çerezi destekleyebilir.
- Birden çok Set-Cookie başlığı tek bir sunucu yanıtında verilebilir.
- Aynı yol ve adın örnekleri, en son örnek öncelikli olacak şekilde birbirlerinin üzerine yazılır. Aynı yolun örnekleri ancak farklı adlar ek eşlemeler ekleyecektir.
- Yolun daha yüksek seviyeli bir değere ayarlanması, diğer daha spesifik yol eşleştirmelerini geçersiz kılmaz. Belirli bir çerez adı için birden fazla eşleşme varsa, ancak farklı yollara sahipse, eşleşen tüm çerezler gönderilecektir.
- Sona erme başlığı, istemcinin eşlemeyi temizlemenin ne zaman güvenli olduğunu bilmesini sağlar, ancak istemcinin bunu yapması gerekmez. Bir müşteri, çerez sayısı dahili limitlerini aşarsa, son kullanma tarihi gelmeden önce bir çerezi silebilir.
- Bir sunucuya tanımlama bilgileri gönderirken, daha belirli bir yol eşlemesine sahip tüm tanımlama bilgileri, daha az belirli yol eşlemelerine sahip tanımlama bilgilerinden önce gönderilmelidir. Örneğin, “/” yol eşlemesine sahip bir “ad1 = foo” çerezi, her ikisi de gönderilecekse “/ bar” yol eşlemesine sahip “ad1 = foo2” çerezinden sonra gönderilmelidir.
- Bir CGI betiği bir çerezi silmek isterse, bunu aynı ada sahip bir çerez döndürerek yapabilir ve geçmişte olan bir zaman aşımına uğrar. Geçerliliğini yitiren tanımlama bilgisinin geçerli tanımlama bilgisini değiştirmesi için yol ve ad tam olarak eşleşmelidir. Bu gereksinim, bir çerezin yaratıcısı dışında herhangi birinin bir çerezi silmesini zorlaştırır.
- HTTP’yi önbelleğe alırken, bir proxy sunucusunun yapabileceği gibi, Set-cookie yanıt başlığı hiçbir zaman önbelleğe alınmamalıdır.
- Bir proxy sunucusu Set-cookie başlığı içeren bir yanıt alırsa , cevabın 304 (Değiştirilmedi) veya 200 (OK) olmasına bakılmaksızın Set-cookie başlığını istemciye yaymalıdır. Benzer şekilde, bir müşteri talebi bir Cookie: başlığı içeriyorsa, koşullu If-modifiye-since isteği yapılsa bile, bir proxy aracılığıyla iletilmelidir.
SET-Cookie: Cookie_Name = Cookie_Value; expire = Tarih; etki alanı = EtkiAlanı_Adı; yol = Yol; Secure_Flag = boole; Bayrak = boole
Cookie_Name ve Cookie_Value, tanımlama bilgisinde saklamak istediğimiz gerçek bilgilere sahiptir. Tarayıcıda bir olarak görünen bir çerezde birden fazla Çerez_Adı ve Çerez_Değeri çiftine sahip olabiliriz.
Tarih, çerezin geçerli yaşam süresidir. Varsayılan olarak çerez, tarayıcı kapatıldığında süresi dolacak şekilde ayarlanmıştır. Son kullanma tarihi ayarlanmışsa, çerez, son kullanma tarihine ulaşıldığında artık saklanmayacaktır.
EtkiAlanı_Adı, tanımlama bilgisinin geçerli olduğu bir ana bilgisayar veya etki alanı adıdır. Bir sunucu belirli bir Web sitesi için tanımlama bilgilerini ararken, EtkiAlanı_Adı ile ana bilgisayarın gerçek İnternet etki alanı adının bir karşılaştırması yapılır. Örneğin, bu alanın alan adı olarak domain = acme.com olabilir.
Bayrak, belirli bir etki alanındaki tüm makinelerin çerezdeki değişkene erişip erişemeyeceğini belirtir. Doğruysa, belirtilen EtkiAlanı_Adı’ndaki tüm sunucular tanımlama bilgisini kullanabilir (ve tarayıcı tanımlama bilgisini o etki alanındaki tüm sunuculara sağlar). Yanlış Domain.Name, tarayıcının bu çerezi vereceği tek ana bilgisayar olan bir ana bilgisayar adı olarak yorumlanırsa.
Yol, çerez için etki alanındaki geçerli yolu belirler. En genel yol “/” dir. Örneğin, “/ foo” yolu “/ foodoc” ve “/foo/index.html” ile eşleşir.
Bir tanımlama bilgisi “güvenli” olarak belirtilirse, tanımlama bilgisi yalnızca SSL bağlantısı gibi güvenli iletişim kanalları üzerinden iletilecektir.
Cookie_Name ve Cookie_Value dışında yukarıdaki alanların tümü isteğe bağlıdır. Bazı tanımlama bilgilerine sahip bir tarayıcı, bir Web sunucusuna bir URL için bir HTTP isteği gönderdiğinde, istek aşağıdaki biçimde bir satır içerir.
Çerez: Cookie_Name1 = Cookie_Value1; Cookie_Name2 = Cookie_Value2; . . .
Yalnızca o sunucuyla ilgili olan çerezler (Etki_Alanı_Adı ve Bayrak alanları sayesinde) tarayıcı tarafından gönderilecektir.
Secure ve HttpOnly,nitelikleri ilişkili değerleri yoktur. Aksine, sadece öznitelik adlarının varlığı, davranışlarının etkinleştirilmesi gerektiğini gösterir.
Secure nitelikli tarayıcılar aracılığıyla yalnızca çerezleri kullanmayı yönlendiren, şifrelenmiş iletim sınırlı çerez iletişimi sağlamak için tasarlanan güvenli/şifreli bağlantıları. Bununla birlikte, bir web sunucusu güvenli olmayan bir bağlantıdan güvenli bir özniteliğe sahip bir tanımlama bilgisi ayarlarsa, tanımlama bilgisi, ortadaki adam saldırıları tarafından kullanıcıya gönderildiğinde yine de durdurulabilir . Bu nedenle, maksimum güvenlik için, Secure özniteliğine sahip tanımlama bilgileri yalnızca güvenli bir bağlantı üzerinden ayarlanmalıdır.
HttpOnly özellik, tarayıcıları tanımlama bilgilerini HTTP (ve HTTPS) istekleri dışındaki kanallar üzerinden göstermemeye yönlendirir. Bu, çereze istemci tarafı kodlama dilleri (özellikle Javascript) aracılığıyla erişilemeyeceği ve bu nedenle siteler arası komut dosyası oluşturma (yaygın bir saldırı tekniği) yoluyla kolayca çalınamayacağı anlamına gelir.
SameSite çerezleri, sunucuların siteler arası yapılan isteklerde (buradaki Site tescilli etki alanı tarafından tanımlıdır) çerez gönderimini engellemesini sağlar, bu da siteler arası sahtecilik saldırılarına (CSRF) karşı bir miktar koruma sağlar.SameSite çerezleri nispeten yenidir ve tüm büyük tarayıcılar tarafından desteklenir.
Sunucu, sunucu için geçerli olan herhangi bir çerez bulursa, bu çerezler tarayıcı ile sunucu arasındaki bu iletişim sırasında kullanılır. Bununla birlikte, sunucu kendisi için belirlenmiş herhangi bir tanımlama bilgisi bulamazsa, ya bu sunucu iletişimde tanımlama bilgilerini kullanmaz ya da sunucu, tarayıcı ile sunucu arasında sonraki iletişim için yeni tanımlama bilgileri oluşturur. Ayrıca, sunucular herhangi bir özel durum için tanımlama bilgilerinin içeriğini güncelleyebilir. Çerezlerin yayınlayıcısı, çerezlerin doğrulanması için önemli değildir. Başka bir deyişle, bir sunucu, etki alanındaki diğer sunucular için tanımlama bilgileri oluşturabilir.
Not: Set-Cookie başlığı çeşitli sunucu tarafı uygulamalarda şöyle kullanılır;
- https://www.php.net/manual/en/function.setcookie.php
- https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_response_setheader_name_value
- https://docs.python.org/3/library/http.cookies.html
- https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html
ÇEREZLER NASIL ÇALIŞIR
Çerezler, HTTP header (HTTP üst bilgi) alanları ile gönderilir ve alınır. HTTP header; HTTP request (HTTP istek) ve HTTP response (HTTP yanıt) mesajlarından oluşur.Çalışma mantığını kısaca anlatmak gerekirse; bir siteye girildiğinde, kullanıcı, server’dan siteyi kendisine getirmesi için istek mesajı göndermiş olur, buna HTTP request denir. Server’da buna karşılık olarak yanıt verir ve siteyi kullanıcıya gönderir, buna da HTTP response denir. Çerezler, HTTP request’in Cookie alanı ve HTTP response’un Set-Cookie alanı ile tanımlanır ve böylece client-server ilişkisi kurulmuş olur.
WEB DEPOLAMA (WEB STORAGE) KAVRAMLARI
Henüz HTML5 geliştirilmemişken veri depolamak için çerezler (kalıcı çerezler, oturum çerezleri vb.) kullanılıyordu. HTML5’in geliştirilmesiyle birlikte veri depolamaya yarayan yeni alternatifler geldi: Web Storage (Web Depolama). HTML5 web depolama için bize 2 seçenek sunmakta. Bunlar Local Storage (Yerel Depolama) ve Session Storage (Geçici Depolama). Mantığını çerezler gibi düşünürsek; local storage ile kalıcı çerezler ve session storage ile geçici çerezler ilişkilendirilebilir. Ancak çerezlerden en önemli farklarından biri; local storage ve session storage verileri kullanıcı bilgisayarında (tarayıcıya göre konum değişebilir) depolanır ve gerektiğinde buradan çağrılır. Bu veriler çerezlerde olduğu gibi key-value tanımlamasıyla saklanır.Web Storage özelliği Javascript ile kullanılır. Depolama işlemleri yapılırken HTML5 ile birlikte hazır olarak gelen localStorage ve sessionStorage nesnelerinden yararlanılır. Web depolamayı tarayıcıların çok eski sürümleri hariç bütün popüler tarayıcılar destekler.
Çerezlerin sahip olduığu bütün avantajlar web storage’da da vardır. Ancak web storage çerezlerin bazı eksik noktalarını tamamlamıştır. Bunlar;
- Kalıcı çerezlerde maksimum veri depolama boyutu 4KB’dir. Ancak Web Storage ile büyük miktarlardaki veriler depolanabilir.
- Veriler server tarafında değil client tarafında tutulur. Bu sayede websitelerine erişimde hız ve performans bakımından artış sağlanır. Çünkü normalde kalıcı çerezler HTTP request mesajı ile server’a iletilir ama Web Storage’da veriler kullanıcı bilgisayarında saklandığı için ve gerektiğinde kullanıcı bilgisayarından çağrıldığı için buna gerek yoktur. Dolayısıyla çerezler server’ı meşgul etmeyecektir.
Bu içeriği görmek için giriş yapın.