Bosh sahifa Wiki CORS

CORS

CORS — Cross-Origin Resource Sharing, ya’ni browserda bir origin’dan boshqa origin’dagi resurslarga so‘rov yuborish va javobni o‘qish qoidalarini boshqaruvchi mexanizm. CORS web browser xavfsizlik modeli bilan bog‘liq.

CORS server tomonidan HTTP headerlar orqali boshqariladi. U qaysi domainlar server resurslaridan foydalanishi mumkinligini belgilaydi.

Origin

Origin uch qismdan iborat:

Masalan:

  • https://uzbekdevs.uz;
  • https://api.uzbekdevs.uz;
  • http://localhost:3000.

Agar protocol, domain yoki port farq qilsa, bu boshqa origin hisoblanadi.

Vazifasi

CORS quyidagi vazifalarni bajaradi:

  • browserdagi cross-origin so‘rovlarni nazorat qilish;
  • API’ga qaysi frontendlar ulan olishini belgilash;
  • begona saytlar response o‘qishini cheklash;
  • browser xavfsizlik modelini qo‘llab-quvvatlash;
  • frontend va backend alohida domainlarda ishlaganda ruxsat berish;
  • cookie bilan ishlaydigan cross-origin requestlarni boshqarish.

Masalan, frontend https://app.uzbekdevs.uz da, API esa https://api.uzbekdevs.uz da bo‘lsa, API CORS orqali frontendga ruxsat berishi kerak bo‘lishi mumkin.

Same-Origin Policy

Same-Origin Policybrowser xavfsizlik qoidasi. U bir origin’dagi sahifaga boshqa origin’dagi ma’lumotlarni erkin o‘qishga ruxsat bermaydi.

Bu qoida:

  • foydalanuvchi ma’lumotlarini himoyalaydi;
  • begona saytlar maxfiy response o‘qishini cheklaydi;
  • browser security modelining asosiy qismi hisoblanadi;
  • CORS orqali nazoratli tarzda kengaytiriladi.

CORS Same-Origin Policy’ni bekor qilmaydi, balki server ruxsati bilan cross-origin o‘qishni imkonli qiladi.

CORS qanday ishlaydi?

Browser cross-origin request yuborganda server javobidagi CORS headerlarni tekshiradi.

Oddiy jarayon:

  • frontend boshqa origin’dagi API’ga request yuboradi;
  • browser requestga Origin headerini qo‘shadi;
  • server Access-Control-Allow-Origin headeri bilan javob beradi;
  • browser origin ruxsat etilganini tekshiradi;
  • ruxsat bo‘lsa, JavaScript response’ni o‘qiy oladi;
  • ruxsat bo‘lmasa, browser response’ni bloklaydi.

Muhim jihat: request serverga borishi mumkin, lekin browser JavaScriptga response’ni o‘qishga ruxsat bermasligi mumkin.

Access-Control-Allow-Origin

Access-Control-Allow-Originserver qaysi origin’ga response o‘qishga ruxsat berishini bildiruvchi header.

Misollar:

  • Access-Control-Allow-Origin: https://uzbekdevs.uz
  • Access-Control-Allow-Origin: *

* barcha originlarga ruxsat beradi, lekin credential bilan ishlaganda odatda ishlatilmaydi.

Preflight request

Preflight requestbrowser asosiy requestdan oldin yuboradigan OPTIONS so‘rovi. Bu server requestga ruxsat beradimi yoki yo‘qligini tekshiradi.

Preflight quyidagi holatlarda bo‘lishi mumkin:

  • custom header ishlatilsa;
  • PUT, PATCH, DELETE metodlari ishlatilsa;
  • Content-Type oddiy turlardan boshqa bo‘lsa;
  • credential bilan cross-origin request bo‘lsa.

Server preflight requestga mos CORS headerlar bilan javob qaytarishi kerak.

Access-Control-Allow-Methods

Bu header cross-origin requestlarda qaysi HTTP metodlarga ruxsat borligini bildiradi.

Misol:

Access-Control-Allow-Methods: GET, POST, PUT, DELETE

Bu frontendga shu metodlar bilan request yuborishga ruxsat berilganini bildiradi.

Access-Control-Allow-Headers

Bu header browserga qaysi custom headerlar yuborilishi mumkinligini bildiradi.

Misol:

Access-Control-Allow-Headers: Content-Type, Authorization

Agar frontend Authorization header yubormoqchi bo‘lsa, server bu headerga ruxsat berishi kerak.

Credentials

CORS’da credentials cookie, authorization header yoki TLS client certificate kabi authentication ma’lumotlarini bildiradi.

Credential bilan ishlashda:

  • frontend credentials: "include" ishlatishi mumkin;
  • server Access-Control-Allow-Credentials: true qaytaradi;
  • Access-Control-Allow-Origin aniq origin bo‘lishi kerak;
  • * bilan credential ishlamaydi.

Cookie-based authentication ishlatilganda bu sozlamalar muhim.

CORS va CSRF farqi

CORS va CSRF boshqa-boshqa tushunchalar.

  • CORS response’ni browser JavaScript o‘qishini nazorat qiladi;
  • CSRF foydalanuvchi nomidan ruxsatsiz request yuborishga qaratiladi;
  • CORS noto‘g‘ri sozlansa, ma’lumot oqishi mumkin;
  • CSRF cookie avtomatik yuborilishidan foydalanadi;
  • CORS CSRF himoyasining to‘liq o‘rnini bosmaydi.

Cookie ishlatiladigan tizimlarda CORS to‘g‘ri bo‘lsa ham, CSRF himoyasi kerak bo‘lishi mumkin.

CORS va API

CORS asosan browserdan API’ga yuboriladigan so‘rovlarda ko‘rinadi. Server-to-server requestlarda browser bo‘lmagani uchun CORS odatda qo‘llanmaydi.

API’da CORS quyidagilar uchun kerak:

Dasturlashdagi o‘rni

CORS frontend va backend alohida originlarda ishlaganda muhim bo‘lgan browser xavfsizlik mexanizmidir. U API’dan response o‘qish ruxsatini server headerlari orqali boshqaradi.

Bog‘liq tushunchalar

HTTP, API, Browser, Origin, Same-Origin Policy, CSRF, Cookie, Header, Preflight request, Security