Texnologiyalar va kashfiyotlar

HTTP cookie nima va qanday ishlaydi: sessiya, Secure hamda SameSite tushuntirildi

Goxost Blog · · 7 min read · 116 views
HTTP cookie nima va qanday ishlaydi: sessiya, Secure hamda SameSite tushuntirildi
HTTP cookie nima va qanday ishlaydi: sessiya, Secure hamda SameSite tushuntirildi

HTTP cookie — veb-sahifa yoki ilovadan brauzerga yuboriladigan kichik ma’lumot bo‘lagi bo‘lib, u keyingi HTTP so‘rovlarida avtomatik tarzda birga yuboriladi. Bu sessiyani davom ettirish, foydalanuvchi holatini eslab qolish va personalizatsiya qilish kabi holatlarda ishlatiladi.

Cookie’ning asosiy maqsadi “server brauzerga biror holatni eslab qolishini aytadi, brauzer esa keyingi so‘rovda shu holat haqidagi ma’lumotni birga jo‘natadi” tamoyilini ta’minlashdir. Odatda cookie qiymati foydalanuvchi identifikatori yoki sessiya tokeni ko‘rinishida bo‘ladi, lekin u shart emas.

Cookie brauzer va server o‘rtasida HTTP sarlavhalari bilan almashinadi: server `Set-Cookie` orqali cookie o‘rnatadi, brauzer esa keyingi so‘rovda `Cookie` sarlavhasi ichida cookie’larni yuboradi.

Cookie’ning formatini ko‘rish uchun serverdan kelgan javobda `Set-Cookie` satrini, so‘rovda esa brauzerdan ketayotgan `Cookie` sarlavhasini tekshirish mumkin.

Cookie’lar ko‘pincha “sessiyaga bog‘liq” yoki “doimiy” bo‘lishiga qarab farqlanadi. Farq odatda cookie tarkibidagi `Expires` yoki `Max-Age` atributlari bilan belgilanadi.

Agar `Expires` yoki `Max-Age` ko‘rsatilmasa, cookie odatda brauzer yopilgunga qadar amal qiladi (sessiya cookie). Agar `Max-Age` yoki `Expires` berilsa, u ma’lum muddatdan keyin avtomatik yaroqsiz bo‘ladi (doimiy cookie).

Quyidagi misol doimiy cookie o‘rnatadi: server `Set-Cookie`da `Max-Age=3600` bersa, cookie 3600 soniya (1 soat) amal qiladi. Sessiya cookie uchun bunday muddat atributi bo‘lmaydi.

Qaysi tur ekanini aniqlash uchun cookie’ning atributlari ichida `Max-Age` yoki `Expires` bor-yo‘qligi yetarli mezondir.

Cookie’lar hammasi ham har safar yuborilmaydi. Brauzer cookie’ni yuborish-qilmasligini bir nechta atribut orqali hal qiladi: `Domain`, `Path`, `Secure`, `HttpOnly` va `SameSite`.

Bu cheklovlar cookie qamrovini toraytiradi va ayrim xavfsizlik xavflarini kamaytirishga xizmat qiladi. Xususan, `Secure` cookie faqat HTTPS orqali uzatilishini, `HttpOnly` esa skriptlar cookie’ni o‘qimasligini ta’minlaydi.

Path va Domain qanday ishlaydi

`Path` atributi cookie qaysi URL yo‘li ostida yuborilishini bildiradi. Masalan, `Path=/shop` bo‘lsa, `/shop` bilan boshlanadigan sahifalarga so‘rov qilganda cookie yuboriladi.

`Domain` atributi esa qaysi xost nomlari cookie’ni qabul qilishi mumkinligini belgilaydi. Odatda cookie “o‘rnatilgan xost”ga bog‘liq bo‘ladi; `Domain` bilan yanada kengroq qamrov berilishi mumkin.

Secure, HttpOnly va SameSite

`Secure`: cookie faqat HTTPS orqali yuboriladi. Bu cookie’ni tarmoqda shifrlanmagan kanal orqali oqib ketish ehtimolini kamaytiradi.

`HttpOnly`: brauzer APIlari orqali ishlaydigan skriptlar cookie qiymatini o‘qolmaydi. Bu cookie’ni JavaScript orqali o‘g‘irlashga urinishlar xavfini pasaytiradi.

`SameSite`: “so‘rov qaysi kontekstdan kelgan”iga qarab cookie’ni cheklaydi. `SameSite=Lax` va `SameSite=Strict` holatlarida cross-sayt so‘rovlarida cookie yuborilish mexanizmi farq qiladi; maqsad — cross-sayt soxta so‘rovlar (masalan, ayrim CSRF ssenariylari) ta’sirini kamaytirish.

Cookie ishini “server cookie o‘rnatadi, brauzer keyingi so‘rovda olib boradi” deb soddalashtirib aytish mumkin, lekin real oqim bir nechta bosqichdan iborat bo‘ladi. Quyida odatiy sahifaga kirish va sessiya tiklash jarayonini mantiqan ketma-ket ko‘rsataman.

Har bir bosqichda qaysi sarlavha ishlashi va natija nima bo‘lishi aniq bo‘ladi.

1-bosqich: brauzer so‘rov yuboradi

Brauzer biror URL ga HTTP so‘rov qiladi. Agar o‘sha URL scope’iga mos cookie oldin o‘rnatilgan bo‘lsa, brauzer so‘rovda `Cookie` sarlavhasini qo‘shadi. Agar mos cookie bo‘lmasa, `Cookie` sarlavhasi bo‘lmasligi mumkin.

Bu yerda cookie’lar server uchun “avvalgi holat haqida eslatma” rolini o‘ynaydi.

Server foydalanuvchi sessiyasini boshlash yoki holatni saqlash uchun javob qaytaradi va javob sarlavhasida `Set-Cookie` ko‘rinishida cookie’ni yuboradi. Cookie qiymati odatda sessiya identifikatori yoki token bo‘ladi.

Server cookie’ni qanday scope’ bilan berishini (masalan, `Path`, `Secure`, `SameSite`) belgilaydi.

3-bosqich: brauzer cookie’ni saqlaydi

Brauzer `Set-Cookie` dagi ko‘rsatmalar asosida cookie’ni saqlaydi. Masalan, `Max-Age` yoki `Expires` bo‘lsa, brauzer yaroqlilik muddatini belgilab qo‘yadi; `Domain` va `Path` bo‘lsa, qaysi so‘rovlarga qo‘shilishini hisoblaydi.

Agar cookie formatida noto‘g‘ri atributlar bo‘lsa yoki cheklovlarga zid bo‘lsa, brauzer ularni rad etishi mumkin.

Keyingi safar foydalanuvchi cookie scope’iga mos URL ga kirganda, brauzer avtomatik ravishda `Cookie` sarlavhasini to‘ldirib yuboradi. Server cookie qiymatini o‘qib, sessiya davomiyligini tiklaydi yoki foydalanuvchi holatini aniqlaydi.

Shu tariqa HTTP “stateless” bo‘lsa ham, cookie orqali amaliy “holatli” tajriba yaratiladi.

HTTP dastlab “har bir so‘rov alohida” ishlashga mo‘ljallangan. 1990-yillar boshlarida veb-texnologiyalar tez ommalashgach, server tomonda sessiyani ushlab turish va foydalanuvchi holatini eslab qolish zarurati kuchaydi. Cookie g‘oyasi aynan shu ehtiyojdan kelib chiqqan.

Cookie’larni standartlashtirish bo‘yicha yo‘l bosqichma-bosqich bo‘lgan: dastlab brauzerlar va serverlar cookie mexanizmini norasmiy tarzda qo‘llagan, keyinroq uning umumiy qoidalari rasmiy hujjatlarda mustahkamlangan.

Cookie’ning standartlashuvi va muhim hujjatlar

HTTP cookie haqida asosiy spetsifikatsiyalar W3C va IETF yo‘nalishlarida ishlab chiqilgan va yangilanib kelgan. Amaliyotda cookie semantikasi odatda quyidagi hujjatlar orqali tushuntiriladi: RFC 6265 (2011-yil) — HTTP state’ni cookie orqali boshqarishning asosiy mexanizmlarini belgilaydi.

Keyinchalik xavfsizlik va cross-sayt oqimlar bilan bog‘liq ehtiyojlar sababli `SameSite` kabi tushunchalar keng qo‘llanila boshladi; cookie atributlari brauzerlarning himoya mexanizmlariga moslab takomillashdi.

Cookie’ning o‘ziga xos tomoni shundaki, u brauzer tomonidan so‘rov bilan avtomatik birga yuboriladi. Ba’zi muqobillarda bu xususiyat yo‘q yoki boshqacha nazorat qilinadi. Quyida eng ko‘p uchraydigan alternativalar bilan aniq farqni ko‘rsataman.

YondashuvAsosiy usulSo‘rov bilan avtomatik yuboriladimi?Qachon tanlanadi
CookieSet-Cookie / CookieHa, scope va atributlar mos bo‘lsaSessiyani server tomonda boshqarish, holatni HTTP oqimi bilan bog‘lash
Local storageBrouzer ichida saqlanadiYo‘q (JS orqali qo‘lda yuboriladi)Faqat mijoz tomonda ishlaydigan holat, serverga token uzatishni aniq boshqarish
URL parametr (masalan, ?token=...)URL tarkibida uzatiladiHa, URL so‘rov bilan boradiCheklangan holatlar (odatda xavfsizlikka e’tibor kuchaytiriladi)

Amaliy qism: cookie’ni qanday sozlash va qanday tanlash kerak

Cookie’ni to‘g‘ri sozlash xavfsizlik va ishlash sifatiga bevosita ta’sir qiladi. Amaliy yondashuv: cookie nimani saqlashi (sessiya identifikatori yoki boshqa ma’lumot), qayerga yuborilishi (scope), va qaysi kontekstda yuborilmasligi (cross-sayt) kerakligini oldindan aniqlash.

Quyidagi tavsiyalarni tekshiruv ro‘yxati sifatida ishlating: ular brauzer xatti-harakatini oldindan bashorat qilishga yordam beradi.

Sozlash bo‘yicha tekshiruv ro‘yxati

  • Cookie qiymati sezgir bo‘lsa, `Secure` atributini faollashtiring va faqat HTTPS’da ishlang.
  • Cookie tarkibida sessiya tokeni bo‘lsa, `HttpOnly` ni yoqing (JavaScript orqali o‘qilmasin).
  • Qamrovni toraytirish uchun `Path` va (kerak bo‘lsa) `Domain` ni ehtiyot bilan belgilang.
  • Cross-sayt so‘rovlarida cookie yuborilishini cheklash uchun `SameSite` qiymatini aniq tanlang: sessiya xavfi bo‘lsa, konservativroq variantlar mos kelishi mumkin.
  • Sessiya cookie va doimiy cookie’ni farqlang: `Max-Age` yoki `Expires` qo‘llanishi foydalanuvchi tajribasiga va xavfsizlikka ta’sir qiladi.

Tipik xatolar va ularni aniqlash

Eng ko‘p uchraydigan muammo — cookie noto‘g‘ri scope bilan o‘rnatilib, kutilgan sahifalarda umuman yuborilmasligi. Bunday holatda server sessiyani topolmaydi va foydalanuvchi qayta kirishga majbur bo‘ladi.

Yana bir xato — `Secure` yoqilmagan bo‘lsa yoki `SameSite` noto‘g‘ri tanlansa, cross-sayt oqimlarida sessiya uzilib qolishi mumkin. Brauzer devtools’da “Network” bo‘limidan `Set-Cookie` va keyingi so‘rovlardagi `Cookie` sarlavhalarini solishtirib tekshiring.

FAQ

Cookie’ni o‘chirsam nima bo‘ladi?

Odatda cookie o‘chirilsa, brauzer serverga eski sessiya identifikatorini yubormaydi. Natijada server sessiyani topolmaydi va foydalanuvchi tizimga qayta kirishi yoki sahifadagi holatni qayta boshlab yuborishi mumkin.

Yo‘q. Cookie’ning `Domain` va `Path` atributlari bo‘yicha scope belgilanadi, shuningdek `SameSite` cross-sayt so‘rovlaridagi xatti-harakatni boshqaradi. Shu sababli bir sayt o‘rnatgan cookie boshqa sayt so‘rovlarida avtomatik yuborilmasligi mumkin.

Cookie’ni JavaScript bilan o‘qib bo‘ladimi?

Agar cookie `HttpOnly` bilan o‘rnatilgan bo‘lsa, JavaScript orqali uni o‘qib bo‘lmaydi. Bunday cookie’lar odatda faqat brauzer tomonidan HTTP so‘rov sarlavhalariga qo‘shiladi.

“Xavfsiz” degan javob umumiy bo‘lib qoladi. Cookie xavfsizligi uning atributlariga bog‘liq: `Secure` (HTTPS), `HttpOnly` (JavaScript’dan himoya), va `SameSite` (cross-sayt cheklovi) aynan himoya mexanizmlarining tayanch qismidir.

Har doim emas. Tokenni cookie’da saqlash “so‘rov bilan avtomatik yuborish” qulayligini beradi, lekin tokenning qiymati va atributlari (ayniqsa `Secure`, `HttpOnly`, `SameSite`) to‘g‘ri sozlanmasa xavf oshadi. Tanlov tizimning autentifikatsiya modeliga bog‘liq.

Xulosa

HTTP cookie — brauzer va server o‘rtasida “holat”ni HTTP stateless oqimi ustida saqlash uchun ishlatiladigan mexanizm. Server `Set-Cookie` bilan cookie o‘rnatadi, brauzer `Cookie` sarlavhasi orqali keyingi mos so‘rovlarga qo‘shib boradi.

Cookie’ning qanchalik foydali va xavfsiz bo‘lishi uning scope va atributlari (`Secure`, `HttpOnly`, `SameSite`, `Path`) qanday tanlanganiga bog‘liq. Shuning uchun amaliyotda faqat “cookie ishlatish” emas, balki uni aniq va tekshirib sozlash muhim.