O'zbek

CORS (Cross-Origin Resource Sharing) sirlarini oching va veb-ilovalaringizda domenlararo so'rovlarni xavfsiz yoqishni o'rganing. Ushbu keng qamrovli qo'llanma turli manbalar o'rtasida uzluksiz va xavfsiz aloqani ta'minlab, asoslardan tortib murakkab sozlamalargacha bo'lgan hamma narsani qamrab oladi.

CORSni tushunish: Cross-Origin Resource Sharing bo'yicha to'liq qo'llanma

Bugungi o'zaro bog'langan internetda ilovalar tez-tez turli manbalardagi resurslarga kirishga muhtoj bo'ladi. Aynan shu yerda Cross-Origin Resource Sharing (CORS) ishga tushadi. CORS veb-brauzerlarning bir manbadan (domen, protokol va port) boshqa manbaga yuborilgan so'rovlarni qanday boshqarishini tartibga soluvchi muhim xavfsizlik mexanizmidir. CORSni tushunish har bir veb-dasturchi uchun xavfsiz va funksional veb-ilovalarni yaratishda muhim ahamiyatga ega.

Bir xil manba siyosati (Same-Origin Policy) nima?

CORSga sho'ng'ishdan oldin, Bir xil manba siyosatini (Same-Origin Policy - SOP) tushunish muhimdir. SOP veb-brauzerlarda amalga oshirilgan fundamental xavfsizlik mexanizmidir. Uning maqsadi bir veb-saytdagi zararli skriptlarning boshqa veb-saytdagi maxfiy ma'lumotlarga kirishini oldini olishdir. Manba protokol (masalan, HTTP yoki HTTPS), domen (masalan, example.com) va port raqami (masalan, 80 yoki 443) birikmasi bilan aniqlanadi. Ikki URL bir xil protokol, domen va portga ega bo'lsa, bir xil manbaga ega deb hisoblanadi.

Misol:

SOP skriptlarning boshqa manbadan resurslarga kirishini cheklaydi, agar CORS kabi maxsus chora-tadbirlar bunga ruxsat berish uchun mavjud bo'lmasa.

Nima uchun CORS kerak?

Bir xil manba siyosati xavfsizlik uchun juda muhim bo'lsa-da, u cheklovchi bo'lishi ham mumkin. Ko'pgina zamonaviy veb-ilovalar APIlar yoki kontent yetkazib berish tarmoqlari (CDN) kabi turli serverlardan ma'lumotlarni olishga tayanadi. CORS SOPni yumshatish va xavfsizlikni saqlagan holda qonuniy domenlararo so'rovlarga ruxsat berishning nazorat qilinadigan usulini taqdim etadi.

http://example.com da joylashtirilgan veb-ilova http://api.example.net da joylashtirilgan API serveridan ma'lumotlarni olishi kerak bo'lgan stsenariyni ko'rib chiqing. CORSsiz brauzer SOP tufayli bu so'rovni bloklaydi. CORS API serveriga o'z resurslariga qaysi manbalarga kirishga ruxsat berilganligini aniq ko'rsatishga imkon beradi, bu esa veb-ilovaning to'g'ri ishlashini ta'minlaydi.

CORS qanday ishlaydi: Asoslar

CORS mijoz (brauzer) va server o'rtasida almashinadigan bir qator HTTP sarlavhalari orqali ishlaydi. Server ushbu sarlavhalardan brauzerga so'ralgan resursga kirishga ruxsat berilganmi yoki yo'qligini bildirish uchun foydalanadi. Asosiy HTTP sarlavhasi Access-Control-Allow-Origin hisoblanadi.

1-stsenariy: Oddiy so'rov

"Oddiy so'rov" bu ma'lum mezonlarga javob beradigan GET, HEAD yoki POST so'rovidir (masalan, Content-Type sarlavhasi application/x-www-form-urlencoded, multipart/form-data yoki text/plainlardan biri). Bunday holda, brauzer so'rovni to'g'ridan-to'g'ri serverga yuboradi va server Access-Control-Allow-Origin sarlavhasi bilan javob beradi.

Mijoz so'rovi (http://example.com dan):

GET /data HTTP/1.1
Host: api.example.net
Origin: http://example.com

Server javobi (http://api.example.net dan):

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com
Content-Type: application/json

{
  "data": "Serverdan olingan ma'lumotlar"
}

Ushbu misolda server Access-Control-Allow-Origin: http://example.com bilan javob beradi, bu http://example.com dan kelgan so'rovlarga ruxsat berilganligini ko'rsatadi. Agar so'rovdagi manba Access-Control-Allow-Origin sarlavhasidagi qiymatga mos kelmasa (yoki sarlavha mavjud bo'lmasa), brauzer javobni bloklaydi va mijoz tomonidagi skriptning ma'lumotlarga kirishiga yo'l qo'ymaydi.

2-stsenariy: Preflight so'rovi (murakkab so'rovlar uchun)

PUT, DELETE kabi HTTP usullarini ishlatadigan yoki maxsus sarlavhalarga ega bo'lgan murakkabroq so'rovlar uchun brauzer HTTP OPTIONS usuli yordamida "preflight" so'rovini amalga oshiradi. Ushbu preflight so'rovi haqiqiy so'rovni yuborishdan oldin serverdan ruxsat so'raydi. Server qaysi usullar, sarlavhalar va manbalarga ruxsat berilganligini ko'rsatuvchi sarlavhalar bilan javob beradi.

Mijozning Preflight so'rovi (http://example.com dan):

OPTIONS /data HTTP/1.1
Host: api.example.net
Origin: http://example.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: X-Custom-Header

Server javobi (http://api.example.net dan):

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Methods: GET, PUT, DELETE
Access-Control-Allow-Headers: X-Custom-Header, Content-Type
Access-Control-Max-Age: 3600

Sarlavhalar tushuntirishi:

Agar serverning preflight javobi so'rovga ruxsat berilganligini ko'rsatsa, brauzer haqiqiy so'rovni davom ettiradi. Aks holda, brauzer so'rovni bloklaydi.

Mijozning haqiqiy so'rovi (http://example.com dan):

PUT /data HTTP/1.1
Host: api.example.net
Origin: http://example.com
X-Custom-Header: some-value
Content-Type: application/json

{
  "data": "Yangilanishi kerak bo'lgan ma'lumotlar"
}

Server javobi (http://api.example.net dan):

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com
Content-Type: application/json

{
  "status": "Ma'lumotlar muvaffaqiyatli yangilandi"
}

Umumiy CORS sarlavhalari

Mana siz tushunishingiz kerak bo'lgan asosiy CORS sarlavhalarining tahlili:

Turli server tillarida CORS

CORSni amalga oshirish odatda server tomonidagi ilovangizni tegishli CORS sarlavhalarini yuborish uchun sozlashni o'z ichiga oladi. Mana buni turli tillar va freymvorklarda qanday qilish mumkinligi haqida misollar:

Node.js va Express

Siz cors middleware paketidan foydalanishingiz mumkin:

const express = require('express');
const cors = require('cors');

const app = express();

// Barcha manbalar uchun CORSni yoqish (ISHLAB CHIQARISHDA EHTIYOTKORLIK BILAN FOYDALANING)
app.use(cors());

// Yoki, ma'lum manbalar uchun CORSni sozlash
// app.use(cors({
//   origin: 'http://example.com'
// }));

app.get('/data', (req, res) => {
  res.json({ message: 'Bu barcha manbalar uchun CORS yoqilgan!' });
});

app.listen(3000, () => {
  console.log('Server 3000-portda ishlamoqda');
});

Python va Flask

Siz Flask-CORS kengaytmasidan foydalanishingiz mumkin:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

# Yoki, ma'lum manbalar uchun CORSni sozlash
# CORS(app, resources={r"/api/*": {"origins": "http://example.com"}})

@app.route("/data")
def hello():
    return {"message": "Bu barcha manbalar uchun CORS yoqilgan!"}

if __name__ == '__main__':
    app.run(debug=True)

Java va Spring Boot

Siz Spring Boot ilovangizda CORSni annotatsiyalar yoki konfiguratsiya klasslari yordamida sozlashingiz mumkin:

Annotatsiyalardan foydalanish:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin(origins = "http://example.com") // http://example.com dan kelgan so'rovlarga ruxsat berish
public class DataController {

    @GetMapping("/data")
    public String getData() {
        return "Bu http://example.com uchun CORS yoqilgan!";
    }
}

Konfiguratsiyadan foydalanish:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/data")
                .allowedOrigins("http://example.com") // http://example.com dan kelgan so'rovlarga ruxsat berish
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*");
    }
}

PHP

 "Bu http://example.com uchun CORS yoqilgan!");
echo json_encode($data);
?>

CORS va Xavfsizlik masalalari

CORS domenlararo so'rovlarga imkon bersa-da, uni xavfsiz tarzda amalga oshirish juda muhim. Mana bir nechta muhim masalalar:

CORS muammolarini bartaraf etish

CORS muammolarini tuzatish asabiylashtirishi mumkin. Mana bir nechta keng tarqalgan muammolar va ularni qanday hal qilish mumkinligi:

Nosozliklarni tuzatish vositalari:

Ilg'or CORS stsenariylari

Asosiy CORS tushunchalari nisbatan sodda bo'lsa-da, ko'rib chiqilishi kerak bo'lgan ba'zi ilg'or stsenariylar mavjud:

CORS bo'yicha eng yaxshi amaliyotlar

Xavfsiz va samarali CORS amalga oshirishni ta'minlash uchun ushbu eng yaxshi amaliyotlarga amal qiling:

Xulosa

CORS veb-ilovalarda nazorat ostidagi domenlararo so'rovlarni amalga oshiruvchi muhim xavfsizlik mexanizmidir. CORS qanday ishlashini va uni qanday to'g'ri sozlashni tushunish har bir veb-dasturchi uchun zarurdir. Ushbu keng qamrovli qo'llanmada keltirilgan ko'rsatmalar va eng yaxshi amaliyotlarga rioya qilish orqali siz turli manbalardagi resurslar bilan uzluksiz ishlaydigan xavfsiz va funksional veb-ilovalarni yaratishingiz mumkin.

Har doim xavfsizlikka ustuvor ahamiyat berishni va haddan tashqari ruxsat beruvchi CORS konfiguratsiyalaridan foydalanishdan saqlanishni unutmang. CORS sozlamalaringizning xavfsizlik oqibatlarini diqqat bilan ko'rib chiqish orqali siz o'z ilovalaringiz va ma'lumotlaringizni ruxsatsiz kirishdan himoya qilishingiz mumkin.

Umid qilamizki, ushbu qo'llanma sizga CORSni tushunishga yordam berdi. Dasturlashda omad!