Cookie vs. Local Storage vs. Session Storage Karşılaştırılma İncelemesi

A review of Cookie vs. Local Storage vs. Session Storage 




Abstract

Web-based applications often store data on the server when necessary, but sometimes require client-side data storage as well, depending on the needs. There are various methods available for client-side data storage on browsers. Selecting the right data storage method is critical to enhance the user experience, implement security measures depending on the usage scenario, store data either temporarily or permanently, and optimize application performance. The most common methods for client-side storage are cookies, localStorage, and sessionStorage. In addition to these, alternatives such as IndexedDB, Service Workers, File System Access API, and Storage Access API offer significant solutions in terms of data management.

This study examines in detail the fundamental features, performance, limitations, security approaches, and use cases of the cookie, localStorage, and sessionStorage technologies built on modern browsers. Furthermore, it offers recommendations on how these methods can be used together and which method is more suitable for specific scenarios. The aim is to assist developers in selecting the appropriate data storage methods for web browser-based applications.

Özet
Günümüzde teknolojinin hızla gelişmesiyle birlikte, web tabanlı uygulamalar, erişilebilirlik, düşük maliyet, esneklik ve veri güvenliği gibi avantajları sayesinde her geçen gün daha fazla tercih edilmektedir. Bu uygulamalar, kullanıcıların internet bağlantısı üzerinden her yerden erişebileceği, cihaz bağımsız çalışan ve kolayca güncellenebilen çözümler sunarak, günümüzde dünyasında önemli bir yer edinmiştir. Web tabanlı uygulamalar, ihtiyaçlarına göre gerktiği zaman sunucum tarafından veri depolama işlemleri yaparken kimi zaman istemci tarafında veri saklamaya ihtiyaç duymaktadır. Tarayıcılar üzerinde istemci tarafında veri saklamak için çeşitli yöntemler mevcuttur. Kullanıcı deneyimini artırmak, kullanım senaryosuna bağlı olarak güvenlik önlemleri almak, verileri geçici veya kalıcı olarak depolamak ve uygulama performansını optimize etmek için doğru veri saklama yönteminin seçilmesi kritik bir öneme sahiptir. Bu yöntemlerin en yaygın olanları cookie, localStorage ve sessionStorage’dır. Her bir yöntemin kendine özgü avantajları, sınırlamaları ve kullanım senaryoları bulunmaktadır. Bu yöntemlerin yanı sıra, IndexedDB, Service Workers, File System Access API ve Storage Access API gibi alternatifler de veri yönetimi açısından önemli çözümler sunmaktadır

Bu çalışma, günümüzde kullanılan modern tarayıcılar üzerine inşa edilmiş cookie, localStorage ve sessionStorage teknolojilerinin temel özelliklerini, performanslarını, limitlerini, güvenlik yaklaşımlarını ve kullanım senaryoların detaylı bir şekilde ele almaktadır. Ayrıca, bu yöntemlerin bir arada nasıl kullanılabileceği ve hangi senaryolarda hangi yöntemin daha uygun olduğu konusunda öneriler sunmaktadır. Amaç, geliştiricilerinin web tarayıcı tabanlı uygulamalarda doğru veri saklama yöntemlerini seçmelerine yardımcı olmaktır.

Giriş

İstemci taraflı veri saklama yöntemleri web tarayıcıların gelişmesi ve web uygulamaların popülerliğinin arttığı ve her uygulmanın yapısal farklılıklarından ortaya çıkan ihtiyaçlarının arttığı 1990 yıllarında ortaya çıkmıştır.

Tarayıcılarda veri saklama yöntemi olarak cookie (çerez) ortaya atılmıştır. "cookie" terimi, ilk kez 1994 yılında web programcısı Lou Montulli tarafından kullanılmıştır. Lou Montulli, Lynx adlı metin tabanlı bir web tarayıcısı yarattı, HTTP ve Hypertext Markup Language (HTML) geliştirmede yer aldı ve Netscape’in kurucu mühendislerinden biriydi. Bir e-ticaret sitesinde kullanıcıların ürünlerini sanal bir alışveriş sepetinde tutabilmelerini istiyordu. Bu ihtiyaçtan yola çıkarak, çerez fikrini tarayıcılar için yeniden tasarladı, çift taraflı verilerin aktarımını içeren bir belirteç işlevi gören bir bilgisayar terimi olan "magic cookie" adını verdi (Montulli and Kristol 1997). Başka bir görüş ise, Hansel ve Gretel’in ormanda kaybolduklarında arkalarına ekmek kırıntıları bırakarak yollarını bulma hikayesinden ilham alındığını öne sürer; bu hikaye, kullanıcı aktivitelerini takip etme fikriyle ilişkilendirilmiş ve bu nedenle bu kavrama "cookie" adı verildiği üzerinedir.

Cookie, web geliştirmenin ilk günlerinden bu yana kullanılan en eski veri saklama yöntemlerinden biridir. 1990’ların ortasında Netscape tarafından tanıtılan cookie, kullanıcı durumlarını takip etmek için geliştirilen ilk çözümdü. Ancak, cookie’lerin boyut sınırlamaları ve her HTTP isteğiyle sunucuya gönderilmesi, zamanla performans sorunlarına yol açmıştır(Khu-smith and Mitchell 2002).

localStorage ve sessionStorage, 2009 yılında HTML5 standardıyla birlikte tanıtılmıştır(Zhu 2021). Bu yöntemler, modern web uygulamalarında daha büyük veri setlerini işlemek ve istemci tarafında daha fazla kontrol sağlamak için geliştirilmiştir. LocalStorage, tarayıcı kapatılsa bile verilerin kalıcı olarak saklanmasına olanak tanırken, SessionStorage yalnızca tarayıcı oturumu süresince veri depolamayı sağlar.

Güncel literatürde, bu yöntemlerin performans, limit, güvenlik, entegrasyon ve kullanım kolaylığı açısından karşılaştırmaları farklı olarak bir çok çalışma yapılmıştır. Mitchell ve arkadaşlarının 2002’de yapğıtığı çalışmada, cookie’lerin güvenlik bayrakları (HttpOnly ve Secure) ile donatıldığında daha güvenli hale geldiği., ancak bu yöntemlerin manuel olarak uygulanması gerektiği belirtilmiştir(Khu-smith and Mitchell 2002). Diğer yandan, localStorage ve sessionStorage’ın büyük veri setlerini desteklediği, ancak bunların güvenlik açısından zayıf yönleri olabileceği ifade edilmiştir (Zhu 2021).

Cookies yani diğer bir adıyla çerezler, web uygulamalarının web tarayıcısı üzerinden bilgisayar tarafında veri saklamak için ilk geliştirilen yöntemlerden biridir. HTTP protokolü stateless (durumsuz) bir yapıya yani sadece istek-cevap üzerine kurulu olduğundan, cookie sunucu ve istemci arasındaki durumu korumak için tasarlanmıştır.

Çerez dosyaları, kullanıcıların oturum bilgilerini, sayfa üzerinde geçirdikleri süreyi ve içerik tüketim alışkanlıklarını, kişileştirme verilerini saklamak gibi çeşitli amaçlarla kullanılır. Ancak, KVKK ve GDPR gibi yasal düzenlemeler sonucunda, çerezlerin kişisel verileri tutması kısıtlanmıştır. Günümüzde çerezler, genellikle kullanıcıların çevrimiçi aktivitelerini analiz ederek site deneyimini iyileştirmek ya da ziyaret edilen ürün ve içerik türlerine yönelik reklamlar göstermek için kullanılmaktadır. Bu yasal düzenlemeler gereği, internet sitelerinin çerez verilerini saklamak için kullanıcılardan açık bir onay alması zorunludur.

Çerezler, kullanım amaçlarına göre farklı şekillerde sınıflandırılabilir. En yaygın sınıflandırma şu şekildedir:

  • Oturum Çerezleri, geçici çerezlerdir; tarayıcı kapatıldığında silinir. Belirli bir kullanım süresi vardır. Bunlar asla sabit sürücüde depolanmazlar. Sadece ziyaret edilen önceki sayfaların hatırlamasına yardımcı olmak için kullanılırlar. Kullanıcı siteden ayrıldığında kendiliğinden silinirler.
  • Kalıcı Çerezler, belirli bir süre boyunca tarayıcıda saklanır ve bir sonraki ziyaretinizde tekrar kullanılır, bilgisayarın alt klasörlerinde uzun süre saklanan ve web sitesi tekrar ziyaret edildiğinde aktif hale gelen çerezlerdir. Bu çerezler genellikle kimlik doğrulama ve kullanıcı aktivitelerini takip etme amacıyla kullanılır. Örneğin, kullanıcının daha önce bir web sitesinde kaç kez oturum açtığı, hangi isimle kayıt olduğu veya parola gibi önemli bilgiler kalıcı çerezlerde saklanabilir.
  • Birinci Taraf Çerezleri, doğrudan ziyaret ettiğiniz web sitesi tarafından oluşturulur.
  • Üçüncü Taraf Çerezleri, reklamcılar veya üçüncü taraf hizmet sağlayıcılar tarafından oluşturulur.

Cookieler, web tarayıcı üzerinde anahtar-değer (key-value) birleşiminden oluşan tek bir metin olarak olarak sadece web uygulamasının domain ve alt domainleri tarafından erişebilen bir yapıya sahiptir. Cookieler tarayıcı üzerinden JavaScript ve HTTP üzerinden iletildiği sunucu tarafından herhangi bir programala dili ile erişebilinir.
Bir cookie şu özellikleri sahiptir:

  • Anahtar
  • Değer
  • Path (Web URL)
  • Expires / Max Age, kullanım süresi
  • HttpOnly
  • Secure
  • SameSite

HttpOnly Cookie

HttpOnly cookie, sadece sunucu tarafında erişebilinen, istemci tarafından çalıştırılan JavaScript gibi betik dilleri tarafından erişilememesini sağlayan bir güvenlik özelliğidir. Bu çerez, yalnızca sunucu tarafında HTTP protokolü üzerinden erişilebilir.

HttpOnly özelliği, kimlik oturumu ve benzeri önemli cookie verilerinin çalınmasını veya kötü niyetli kod tarafından manipüle edilmesini engellemek için kullanılır. Özellikle XSS (Cross-Site Scripting) saldırılarına karşı koruma sağlar.

HttpOnly cookie, güvenliği artırsa da CSRF gibi saldırı türlerine karşın karşı koruma sağlamaz. Bu nedenle diğer güvenlik önlemleri SameSite ve Secure ile birlikte kullanılmalıdır. Secure cookie, HttpOnly cookie’nin yalnızca HTTPS üzerinden gönderilebilmesini sağlar.

SameSite Cookie

SameSite cookie, cookie’lerin web uygulamaları arasında nasıl gönderileceğini belirleyen bir güvenlik özelliğidir. Bu özellik, cookie’lerin sadece belirli koşullarda gönderilmesini sağlayarak Cross-Site Request Forgery (CSRF) saldırılarına karşı korunmaya yardımcı olur. SameSite özelliği üç farklı değer alabilir:

  1. Lax, varsayılan ayar olarak cookie’nin sadece aynı domain altında gönderilmesine sağlar ek olarak web uygulama içerisinde başka bir uygulamaya istek gönderilirken cookie gönderilir.
  2. Strict, Cookie’ler yalnızca tamamen aynı uygulamadan gelen isteklerle gönderilir anca Lax gibi başka uygulamaya istek gönderilirken cookie gönderilmez.
  3. None, varsayılan olarak aynı web uygulamalası ve altında çalışan diğer web uygulamalarının erişmesini sağlar.

Günümüzde web uygulamaları ve tarayıcılar ne kadar gelişsede cookie’lerde, kullanıcı verileri ve oturum yönetimi gibi işlemleri kolaylaştırmak için hala yaygın bir şekilde kullanılmaktadır; ancak, bu kullanım beraberinde XSS, CSRF ve cookie ile oturum verisi hırsızlığı gibi çeşitli saldırı yöntemlerini de getirdiğinden, güvenlik önlemleri HttpOnly, Secure, ve SameSite ayarları kritik bir önem taşımaktadır.

localStorage

Web uygulamalarında veri depolama ihtiyaçları artması ile beraber cookie kullanımı kısıtlamaları ile beraber cookie’nin farklı teknolojilere evrimleşmesini sağladı. HTML5 ile tanıtılan ve modern web tarayıcılarında yaygın olarak kullanılan localStorage bu ihtiyaç doğrultusunda geliştirilmiştir.localStorage, tarayıcıda kalıcı olarak veri saklamak için kullanılan güçlü bir cookie alternatifidir.

İstemcinin çalıştığı tarayıcı üzerinde localStorage, kullanıcı tercihlerini yani tema seçimi, dil tercihleri veya kullanıcı arayüz ayarları gibi verilerini saklamanın en yaygın kullanım alanlarından biridir. Çevrimdışı çalışaçak web uygulamalar için de localStorage sıklıkla tercih edilir. İnternet bağlantısı olmadığında kullanıcıların çevrimdışı olarak uygulamayı kullanmaya devam etmesine olanak tanır. Günümüzde yaygın olarak kullanılan Single Page Application ve RestFul servis uygulamalarında oturum bilgilerinin (OAuth, JWT, Token) tutulması içinde yaygın olarak kullanılmaktadır.

localStorage, HTML5 ile birlikte web tarayıcılarına eklenen bir JavaScript API’sidir ve web sayfalarının, istemcilerin tarayıcılar üzerinde veri saklamasını sağlar. Bu yöntem, cookie gibi belirli kriterlere ve kullanım yada zamanından bağımsız olarak verilerin saklanmasına olanak tanır. localStorage, anahtar-değer (key-value) çiftleri ile çalışır. Veriler, bir anahtar ve ona bağlı bir değerle saklanır anca bu değerler sadece string olarak saklanır farklı türde veri saklamak için genellikle JSON formatında tutulması tercih edilir. localStorage tutulan veriler sadece istemci tarafından JavaScript gibi betik dilleri ile erişebilinir. Sunucu tarafında çalışan programlar, başka bir domain yada alt domain tarafından ve web uygulamanın altında çalışan başka web uygulamalar tarafından erişelemiyeceği garanti edilir bu sayede CSRF saldırılarına karşı güvenli bir yöntem olarak karşımıza çıkar.

localStorage, cookie’e göre daha geniş boyuta çalışma imkanı sağlarken HTTP üzerinden doğrudan iletilmediği için istemci-sunucu arasında durum bilgisini tutmaz ancak istemci tarafından sunucuya atılan her istek ek entegrasyon ile sunucuya gönderilebilinir.

cookie ve localStorage arasında farklar diğer bölümde detaylı olarak performans, limit, kısıt ve entegrasyonlara olarak karşılaştıralacaktır.

sessionStorage

localStorage ve sessionStorage, her ikisi de HTML5 ile gelen ve tarayıcı üzerinde veri saklamaya olanak tanıyan web depolama yöntemleridir. İkisi arasındaki temel fark, veri saklama/kullanım süresidir. localStorage, verileri web uygulamasının tarayıcı üzerinden ki oturumu (tarayıcı ve sekme kapatılması, vb.,) sona erse bile kalıcı olarak saklar bu nedenle, uzun vadeli veri depolama ihtiyaçları için uygundur ancak sessionStorage yalnızca bir tarayıcı üzereinde (her tarayıcı sekmesi farklı oturum oluşturur) oturumu boyunca veri saklar. Oturum kapatıldığında tüm veriler otomatik olarak silinir. Bu nedenle, kısa süreli veya oturum bazlı veri depolama ihtiyaçları için kullanılır.

sessionStorage genel olarak localStorage benzemektedir ancak performans açısında diğer bölümde görüleceği gibi şaşırtıcı farklar olmaktadır.


Güvenlik

Siber Güvenlik Perspektifinden Değerlendirme


Web uygulamalarının ve tarayıcılarının üzerine geliştirilen teknolojiler, kullanıcı verilerinin saklanması ve yönetimi önemli bir rol oynamaktadır. cookie ve localStorage, web tarayıcılarında sıklıkla kullanılan oturum dışı iki temel veri saklama yöntemidir. Ancak, bu iki aracın da potansiyel siber güvenlik tehditlerine maruz kalabileceği unutulmamalıdır. Bu bölümde, iki yöntemin temel yapısından kaynaklanan siber güvenlik riskleri ele alınmakta, bu risklere karşı uygulanabilecek çözüm yöntemleri tartışılmaktadır.

Riskler

Bu bölümde cookie ve localStorage içerisinde verilere için oluşabilecek risklerden bahsedilecektir ve iki yöntemin temel farkları olduğundan ayrı ayrı bölümlere ayrılmıştır.

cookie tarayıcıda oturum dışında verileri saklama kabileyeti ve alt domain yada alt uygulamalar tarafından erişilebildiği için bir çok saldırı riski oluşmaktadır ancak bu saldırılara karşı geçmiş günümüze kadar bir çok güvenlik önlemi eklenmiştir. Güvenlik önlemlerini doğru bir şekilde kullanılırsa oluşabilecek riskler ortadan kalkmış olur.

XSS (Cross-Site Scripting)

XSS saldırısı, saldırgan web uygulamasının sahip olduğu işlevler üzerinden başka kullanıcılar üzerinde çalışabilecek kötü amaçlı bir kod ekler. Saldırı başarılı olursa, saldırgan kurbanın istemcisi üzerinden web uygulamadan bağımsız olarak betik kodu çalıştırmasını sağlar ve istemci tarafından erişebilecek hassas verilere erişmesini sağlar. cookie üzerinde tutulan kimlik oturum bilgileride JavaScript gibi betik diller ile erişelebildiği için bu saldırı yöntemi ile kolayca hedef alınabilinir.

cookie tabanlı XSS saldırıları, bir web uygulamasında saklanan cookie’lerin kötü amaçlı komutlar tarafından ele geçirilmesi veya manipüle edilmesi ile gerçekleşir. Bu saldırı genellikle istemci üzerinde çalıştırılabilecek kötü amaçlı JavaScript kodları kullanılır. Saldırganlar, uygulama üzerine zararlı bir kod enjekte ederek kurbanların istemci üzerinde depoladığı oturum çerezleri veya diğer hassas bilgileri çalmayı hedefler. Bu saldırı tamamen tarayıcı tarafından betik kodların çalıştırılmasını yürütülmesini yasaklama seçeneği vardır ancak günümüzde artık JavaScript gibi diğer web betik dillerini kullanmadan çalışan tarayıcı tabanlı uygulamalar neredeyse olmadığı için bunun kullanılması pek olası gözükmüyor. Bu yüzden günümüzde XSS hala önemli bir sorundur ve cookie hırsızlığı için önemli bir risktir.(Takahashi et al. 2013)

Bu saldırı iki ana yöntemle gerçekleşebilir: Stored XSS ve Reflected XSS. Stored XSS’de kötü niyetli kod parçacıkları, kalıcı olarak bir veritabanında veya sunucuda saklanır ve kurbanlar web uygulamasını her kullanımında çalıştırılabilir. Reflected XSS’de ise kötü niyetli kod, bir URL veya kullanıcı girdisi üzerinden anlık olarak çalıştırılır.
Saldırganın cookie’lere erişmesi durumunda, kullanıcının oturumu ele geçirilebilir ve kimlik doğrulama gerektiren işlemler yapılabilir. Bu tür saldırıları önlemek için web uygulamalarında giriş doğrulama ve çıktı kodlama gibi güvenlik önlemleri uygulanmalı, ayrıca cookie kullanımında bir önceki bölümde bahsedilen HttpOnly ve Secure özellikleri kullanarak erişim sınırlandırılmalıdır. Web uygulaması üzerinden alınan kullanıcı verileri dikkatli bir şekilde filtrelenmesi, XSS korumasının temel taşlarından biridir(Takahashi et al. 2013).

CSRF (Cross-Site Request Forgery)

cookie tabanlı CSRF (Cross-Site Request Forgery) saldırıları, bir tarayı üzerinden çalışan istemci tabanlı uygulama aracılığıyla, istem dışı ve yetkisiz bir şekilde hedef sunucuda işlem gerçekleştirilmesini sağlayan bir güvenlik açığıdır. Bu saldırılar, modern web uygulamalarında kullanılan kimlik doğrulama ve oturum versisi yönetimi mekanizmalarını hedef alır. Özellikle, cookie veri depolama yönteminin temel yapısındaki her HTTP isteğiyle beraber verileri sunucuya göndermesi, bu saldırıların temel zeminini oluşturur. Bu şekilde saldırgan, kurbanın tarayıcısı üzerinden kötü niyetli bir çok saldırı yapabilir. CSRF saldırılarında saldırgan, kurbanın oturumunun aktif olduğunu öngörür ve bu oturumu kötüye kullanarak kurbanın kimliğiyle yetkisiz işlemler gerçekleştirmeyi ve verilerini çalmayı amaçlar.(Kombade 2012)

CSRF saldırılarından korunmak için etkili güvenlik önlemleri alınması gereklidir. En yaygın yöntemlerden biri, her oturum için benzersiz ve rastgele oluşturulmuş bir CSRF token kullanımıdır. Sunucu, gelen istekteki tokeni doğrulayarak isteğin yetkilendirilmiş bir kullanıcıdan geldiğini garanti eder. Ek olarak, SameSite cookie bayrağının kullanımı, çerezlerin yalnızca aynı site üzerinden gönderilmesini sağlayarak saldırının gerçekleşme olasılığını azaltır. Ayrıca, güvenli iletişim için HTTPS protokolü kullanılması ve kritik işlemlerde ek kimlik doğrulama mekanizmalarının devreye alınması önerilmektedir.(Darmawan et al. 2021)

MitM (Man-in-the-Middle)

Cookie tabanlı Man-in-the-Middle (MitM) saldırıları, bir saldırganın iki taraf arasındaki iletişimi gizlice ele geçirip değiştirdiği yada dinlenmesi üzerine kurulan bir saldırı türüdür. Bu saldırılarda hedef, özellikle kimlik ve oturum verileri için kullanılan cookie’lerdir. Oturum cookie’leri genellikle kullanıcının kimliğini doğrulamak ve oturum durumunu korumak için kullanıldığından, eğer oturum cookie’leri HTTP üzerinden veya şifrelenmemiş bir kanaldan iletiliyorsa, saldırgan bu verileri kolaylıkla ele geçirebilir. Ele geçirilen veriler ile saldırganın sunucuya kurbanın kimliğiyle erişim sağlamasına olanak tanır.

Bu saldırı türüne ve oluşabilecek risklere sunucu-istemci arasında ki bağlantı HTTPS kullanımı ve güçlü bir TLS politikası ile veri iletişiminin güvenliği sağlandıktan sonra cookie tarafından HttpOnly ve Secure özellikleri ile beraber SameSite özelliği kullanılarak veri iletişim üzerinden oluşabilecek risklere karşı önlemler alınabilir.(Gangan 2015)

localStorage ve sessionStorage Riskleri

Html5 ile beraber web tarayıcılarına eklenen localStorage ve sessionStorage ver saklama yöntemleri, istemci tarafında veri depolama ihtiyaçlarını karşılamak amacıyla geliştirilmiş etkili araçlardır. Ancak, bu mekanizmalar genellikle güvenlik açıklarına hedef olabilecek şekilde yanlış kullanımları güvenlik risklerini ortaya çıkartmaktadır. Özellikle, depolanan verilere JavaScript ile doğrudan erişim sağlanabilir olması ve içerisinde kimlik doğrulama anahtarlarının saklanması, bu yöntemlerin saldırganlar için cazip bir hedef haline getirmektedir. localStorage ve sessionStorage yöntemleri cookie gibi her HTTP isteğinde otomatik olarak isteğe eklenmediğinden dolayı CSRF ve MitM saldırılarına karşı risk oluşturmamaktadır ancak yanlış kullanımlar bu saldırılar için risk oluşmaktadır bu yüzden geliştiricilerin bu depolama yöntemlerini kullanırken risklere karşı bilinçli ve dikkatli olması gerekmektedir.

Bu tür depolama mekanizmalarına yönelik saldırılar arasında en yaygın olanı Cross-Site Scripting (XSS) saldırılarıdır. XSS yoluyla saldırganlar, depolama alanlarına erişerek oturum anahtalarının, kullanıcı bilgileri gibi hassas verileri ele geçirebilir. Ayrıca, Man-in-the-Browser (MitB) saldırıları, zararlı tarayıcı uzantıları veya kötü niyetli betik kod çalıştırabilecek komutlar aracılığıyla localStorage ve sessionStorage verilerini manipüle etme veya çalma imkanı sunar.

localStorage ve sessionStorage üzerinde kimlik doğrulama anahtarı saklarken çalınma gibi oluşabilecek güvenlik risklerine karşı kullanılan anahtarların kısa ömürlü ve güvenliği ispatlanmış şifreleme veya imzalama teknikleri ile beraber kullanılmalıdır. Eğer burada saklanan veriler HTTP üzerinden sunucuya gönderilecekse CSRF ve MitM saldırılar karşın önlemler alınarak HTTPS protokolü kullanılmalıdır. Kullanıcı tarafından bu verilerin tarayıcı üzerinden çok kolay bir şekilde değiştirebileceğinden oluşabilecek riskler göz önüne alınmaladır. localStorage ve sessionStorage’da saklanan veriler, şifrelenmiş olarak saklanabilir. Ancak, şifreleme yalnızca verilerin manipülasyonunu zorlaştırır ve tamamen güvenli bir çözüm sunmaz.


Karşılaştırma


Bu bölümde cookie, localStorage ve sessionStorage veri depolama yöntemlerinin performans, limit, özellik vb. metriklerde karşılaştırılması yapılmaktadır. Burada ki karşılaştırmalar 12th Gen Intel(R) Core(TM) i7-12700 2.10 GHz işlemciye sahip bilgisayarda Microsoft Edge 131.0.2903.112 tarayıcısı üzerinden yapılmıştır.

Performans

cookie ve localStorage & sessionStorage farklı mekanikleri sahip olduklarından veri erişim performanslarından tarayıcı tabanlı farklılıklar ortaya çıkmaktadır. cookie HTML document üzerinde tek satırlı bir string olarak saklanırken localStorage ve sessionStorage anahtar-değer çifti olarak saklanmaktadır. Bu yüzden veri yazma ve okuma performanslarında gözle görülebilir farklar gözlemlenmektedir. Ancak bu karşılaştırmayı yaparken cookie’nin veri depolama limitlerinden dolayı 3 yöntem sadece kısa veri boyutlarından karşılaştırılmış olup localStorage ve sessionStorage büyük veri boyutlarında karşılaştırabilmektedir.

KeyLength / DataLength TotalByte cookie localStorage sessionStorage
16 byte / 32 byte 4080 0.39999998 0.00676488 0.00660141
32 byte / 1 kb 5 000 165 - 3.78399999 6.47999999
32 byte / 5kb 5 000 032 - 30.4800001 43.95999999

Tablo 3.1 Veri ekleme hızı performansı milisaniye (ms) karşılaştırması

Veri ekleme karşılaştırılması her bir yöntem ve her bir kıstas için en az 50 kez test edilip milisaniye olarak ortalaması alınarak Tablo 3.1’deki sonuçlar ortaya çıkmıştır. Bu sonuçlara göre cookie diğer yöntemlere göre daha yavaş veri yazma performansına sahipken şaşırtıcı şekilde aynı mekaniklere sahip localStorage ve sessionStorage arasında veri yazma performanslarında büyük farklar ortaya çıkmaktadır.

TotalByte cookie localStorage sessionStorage
4096 0.200000047 0.0003257999 0.0003507999
5 000 032 - 0.299999952 0.5999998092

Tablo 3.2 Veri getirme hızı performansı milisaniye (ms) karşılaştırılması

Depolanan veriye erişim durumunda cookie yöntemi yine diğer yöntemlere göre daha yavaş performansa sahiptir bunun başlıca nedeni cookie üzerinden herhangi bir anahtar-değer çiftine erişmek için tek satırlı string ifadeyi parçalamak gerekmektedir. sessionStorage ile localStorage arasında performans farklıları aynı mekaniklere sahip olmasında rağmen yine büyük farklar ortaya çıkmaktadır.

Depolama Limitleri

İncelenen üç veri saklama yöntemlerinin kendi mekaniklerine göre farklı boyutlarda veri saklama kapasiteleri bulunmaktadır. Tablo 3.3 ortalama olarak önerilen sınırları göstermektedir ancak her tarayıcı depolama yöntemlerinin standart önerilere rağmen kendi sınırlarını koyar.

cookie localStorage sessionStorage
4kb 5-10 MB 5MB

Tablo 3.3 Veri depolama sınırları

Özelliklike cookie yönteminde RFC 2109 (Montulli and Kristol 1997), RFC 2965 (Montulli and Kristol 2000) ve RFC 6265’te(Barth and Berkeley 2011) belirtildiği gibi, en az 300 cookie, maksimum 4096 byte her domain için en fazla 20 adet ve 81920 byte boyutunda kabul edebilmelidir (sadece değerin kendisi değil, tüm parametreler dahil).

RFC çerez boyutlarına ilişkin sınırlamalar önermiş olmasına rağmen, farklı tarayıcılar sınırlamaları farklı şekillerde uyguladıkları için. tarayıcılar arasında uyumluluk sorunları yarattı bu durumda cookie kullanımın zorluklarından birini ortaya çıkardı.

Sahip Oldukları Özellikler

Bu bölümde incelemenin özeti olarak cookie, localStorage ve sessionStorage sahip oldukları özellikleri kısaca Tablo 3.4 gösterilmektedir.

Özellik cookie localStorage sessionStorage
Kapasite 4 KB 5-10 MB 5 MB
Erişebilirlik İstemci-Sunucu İstemci İstemci
SSL Desteği Evet Hayır Hayır
Temizleme/Silme
Otomatik
süre bazlı
Manuel
Otomatik
oturum bazlı
Veri Ömürü Özel süre
Silinene
kadar
Oturum
bitene kadar
HTTP İletimi Otomatik
Manuel
eklenebilir
Manuel
eklenebilir
Maksimum Adet 300 Sınırsız Sınırsız
Alt Domain Paylaşımı Evet Hayır Hayır
Alt Uygulama Paylaşımı
(iframe vb.)
Evet Hayır Hayır
Ortaya Çıkış Tarihi 1994 2009 2009
Betik Diller
Erişimi
HttpOnly
haricinde Evet
Evet Evet
Betik Diller
Düzenleme
HttpOnly
haricinde Evet
Evet Evet
Önemli Saldırı Türleri XSS, CSRF, MitM CSRF CSRF
Yasal Çerceve
KVKK
GDPR vb.
Hayır Hayır
Uyumluluk Tüm Tarayıcılar
2009 sonrası
tarayıcılar
2009 sonrası
tarayıcılar
Kullanıcılar
tarafından
düzenlenebilir
ve engellenebilir
Evet Evet Evet
Depolabilir Veri Tipi Metin (string) Metin (string) Metin (string)
Performans Yavaş Hızlı Hızlı
JavaScript API document.cookie
localStorage
.setItem()
.getItem()
.removeItem()
.key()
.length
.clear()
sessionStorage
.setItem()
.getItem()
.removeItem()
.key()
.length.clear()

Tablo 3.4 cookie ve localStorage & sessionStorage sahip oldukları özellikler


Tartışma & Sonuç


cookie, localStorage ve sessionStorage, farklı senaryolarda kullanılabilecek önemli veri saklama yöntemleridir. Hangi yöntemin kullanılacağına karar verirken veri boyutu, saklama süresi, güvenlik gereksinimleri ve performans beklentileri dikkate alınmalıdır.

cookie: Eğer kullanıcı doğrulama bilgileri veya sunucuyla düzenli veri alışverişi gerektiren durumlar söz konusuysa, cookie’ler doğru bir seçimdir. Ancak, veri boyutunun küçük tutulması ve güvenlik ayarlarının (HttpOnly ve Secure özellikleri gibi) dikkatlice yapılandırılması önemlidir.

localStorage: Uzun süre saklanması gereken veriler, sunucu tabanlı servis için üretilen kimlik doğrulama anahtarları veya büyük miktarda veri için idealdir. Örneğin, kullanıcı tercihleri, çevrimdışı uygulama verileri veya geniş çaplı analizler için localStorage kullanılabilir. Güvenliğin manuel olarak sağlanması gerektiği unutulmamalıdır.

sessionStorage: Geçici ve oturuma özgü veriler için en uygun seçenektir. Özellikle form verileri veya tek bir sekmeye özgü oturum bilgileri saklanırken kullanılması önerilir. Tarayıcı sekmesi kapandığında verilerin otomatik olarak silinmesi avantaj sağlar.

Modern web uygulamalarında bu yöntemlerin bir arada kullanılması, performansı optimize ederken güvenliği ve kullanıcı deneyimini artırabilir. Örneğin, kimlik doğrulama için cookie’ler, çevrimdışı veri saklama için localStorage ve oturum bazlı işlemler için sessionStorage kullanılarak karma bir çözüm elde edilebilir. Performans, güvenlik, veri boyutu ve kalıcılık gibi kriterler göz önüne alınarak uygun yöntem seçilmelidir. Örneğin, kullanıcı oturumu süresince geçici veriler saklanacaksa sessionStorage tercih edilmeli; uzun süreli ayarlar veya büyük veri setleri için localStorage kullanılmalıdır. Eğer sunucu ile düzenli iletişim gereken bir durumda veri saklanacaksa, cookie’ler uygun bir seçim olacaktır. Uygulamanın ihtiyaçlarına göre bu yöntemlerin bir arada kullanılması da sık karşılaşılan bir yaklaşımdır. Bu tür bir kombinasyonlar, hem performansı artırır hem de veri güvenliği ve kullanıcı deneyimini optimize eder.

Bu çalışmada geçmişten günümüze süre gelen istemci tarafında veri saklama yöntemlerinden en yaygın olan cookie, localStorage ve sessionStorage için tarihçe, sahip oldukları özellikler, güvenlik riskleri, alınabilecek önlemler ve performans kıyaslamalarını detaylıca incelemektedir. Bu çalışma web uygulama geliştiricileri için rehber niteliğinde bir çalışma olarak incelenebilir.

Osman Şakir Kapar
İstanbul Üniversitesi-Cerrahpaşa
Lisansüstü Eğitim Enstitüsü
Bilgisayar Mühendisliği Ana Bilim Dalı
omansak.com
Ocak 2025

  1. Barth, A., and U. C. Berkeley. 2011. “HTTP State Management Mechanism.” https://doi.org/10.17487/RFC6265.
  2. Darmawan, Irfan, Aditya Pratama Abdul Karim, Alam Rahmatulloh, Rohmat Gunawan, and Dita Pramesti. 2021. “JSON Web Token Penetration Testing on Cookie Storage with CSRF Techniques.” In 2021 International Conference Advancement in Data Science, e-Learning and Information Systems (ICADEIS), 1–5. https://doi.org/10.1109/ICADEIS52521.2021.9701965.
  3. Gangan, Subodh. 2015. “A Review of Man-in-the-Middle Attacks.” https://doi.org/10.48550/arXiv.1504.02115.
  4. Khu-smith, Vorapranee, and Chris Mitchell. 2002. “Enhancing the Security of Cookies.” International Conference on Internet, Education and Information Technology. https://doi.org/10.1007/3-540-45861-1_11.
  5. Kombade, Rupali D. 2012. “CSRF Vulnerabilities and Defensive Techniques.” I. J. Computer Network and Information Security. https://doi.org/10.5815/ijcnis.2012.01.04.
  6. Montulli, Lou, and David M. Kristol. 1997. “HTTP State Management Mechanism.” https://doi.org/10.17487/RFC2109.
  7. Lou Montulli and David M. Kristol. Http state management mechanism. Technical report. 2000. “HTTP State Management Mechanism.” https://doi.org/10.17487/RFC2965.
  8. Takahashi, Hiroya, Kenji Yasunaga, Masahiro Mambo, Kwangjo Kim, and Heung Youl Youm. 2013. “Preventing Abuse of Cookies Stolen by XSS.” In 2013 Eighth Asia Joint Conference on Information Security, 85–89. https://doi.org/10.1109/ASIAJCIS.2013.20.
  9. Zhu, Ningxian. 2021. “Security of CORS on LocalStorage.” International Conference on Internet, Education and Information Technology. https://doi.org/10.1109/IEIT53597.2021.00038.

Yorum Gönder

0 Yorumlar