CSP — Content Security Policy, ya’ni browserga sahifa qaysi manbalardan script, style, image, font va boshqa resurslarni yuklashi mumkinligini bildiradigan web xavfsizlik mexanizmi. CSP HTTP header yoki HTML meta tag orqali beriladi.
CSP asosan XSS hujumlarining ta’sirini kamaytirish va sahifadagi resurslar manbasini nazorat qilish uchun ishlatiladi.
Vazifasi
CSP quyidagi vazifalarni bajaradi:
- inline script bajarilishini cheklash;
- faqat ruxsat berilgan manbalardan script yuklash;
- XSS hujumlari ta’sirini kamaytirish;
- tashqi resurslar manbasini nazorat qilish;
- sahifaga zararli kod qo‘shilish xavfini kamaytirish;
- iframe, image, font, style va connect manbalarini boshqarish;
- xavfsizlik buzilishlari haqida report olish.
CSP sahifa xavfsizligini browser darajasida kuchaytiradi.
CSP qanday ishlaydi?
Server browserga Content-Security-Policy headerini yuboradi. Browser shu policy asosida sahifa resurslarini yuklash yoki bloklashni hal qiladi.
Oddiy jarayon:
- browser sahifani yuklaydi;
- server CSP header qaytaradi;
- sahifadagi script, style, image va boshqa resurslar tekshiriladi;
- policy ruxsat bergan resurslar yuklanadi;
- ruxsat berilmagan resurslar bloklanadi;
- kerak bo‘lsa violation report yuboriladi.
CSP server va browser o‘rtasida ishlaydigan xavfsizlik qoidasi hisoblanadi.
Content-Security-Policy header
CSP odatda HTTP header orqali beriladi.
Misol:
Content-Security-Policy: default-src 'self'; script-src 'self'; img-src 'self' https:;
Bu policy:
- asosiy resurslar faqat o‘z saytidan yuklanishini;
- scriptlar faqat o‘z saytidan kelishini;
- rasmlar o‘z sayt yoki HTTPS manbalardan yuklanishini bildiradi.
default-src
default-src — CSP ichidagi umumiy fallback directive. Agar boshqa directive ko‘rsatilmagan bo‘lsa, browser shu qoidaga tayanadi.
Misol:
default-src 'self'
Bu sahifadagi ko‘p resurslar faqat shu origin’dan yuklanishini bildiradi.
script-src
script-src — JavaScript manbalarini boshqaradi. XSS himoyasida eng muhim directive’lardan biridir.
script-src orqali:
- qaysi domainlardan script yuklanishi belgilanadi;
- inline script cheklanishi mumkin;
evalishlatilishi cheklanishi mumkin;- nonce yoki hash orqali ruxsat berish mumkin.
Masalan:
script-src 'self' https://cdn.example.com
style-src
style-src — CSS manbalarini boshqaradi. U tashqi style fayllar va inline stylelarga ta’sir qilishi mumkin.
Misol:
style-src 'self'
Bu CSS faqat shu origin’dan yuklanishini bildiradi.
img-src
img-src — rasm manbalarini boshqaradi.
Misol:
img-src 'self' https: data:
Bu rasm o‘z sayt, HTTPS manbalar va data: URI orqali yuklanishi mumkinligini bildiradi.
connect-src
connect-src — JavaScript orqali yuboriladigan ulanishlarni boshqaradi.
U quyidagilarga ta’sir qiladi:
Masalan, frontend faqat https://api.uzbekdevs.uz bilan ishlashi kerak bo‘lsa, connect-src orqali cheklash mumkin.
frame-src
frame-src — sahifaga iframe orqali qaysi manbalarni joylash mumkinligini belgilaydi.
U quyidagilar bilan bog‘liq:
- embedded sahifalar;
- video playerlar;
- payment iframe;
- external widgetlar;
- clickjacking himoyasi.
Ayrim holatlarda frame-ancestors sahifani kim iframe ichida ko‘rsata olishini belgilaydi.
nonce
Nonce — har bir response uchun yaratiladigan tasodifiy qiymat. CSP’da ma’lum inline scriptga ruxsat berish uchun ishlatiladi.
Jarayon:
- server tasodifiy nonce yaratadi;
- CSP headerda shu nonce ko‘rsatiladi;
- script tagga ham nonce qo‘yiladi;
- browser faqat mos nonce’li scriptni bajaradi.
Nonce inline scriptlarni to‘liq ochib yubormasdan, aniq ruxsat berish imkonini beradi.
Hash asosida ruxsat berish
CSP ma’lum inline script yoki style uchun hash orqali ruxsat berishi mumkin. Bunda script matni hash qilinadi va policy ichida ko‘rsatiladi.
Bu usulda:
- script matni o‘zgarsa, hash mos kelmaydi;
- faqat aniq script bajariladi;
- begona inline script bloklanadi.
Hash yondashuvi statik inline scriptlarda uchrashi mumkin.
Report-Only rejimi
Content-Security-Policy-Report-Only — CSP qoidalarini bloklamasdan, faqat buzilishlar haqida report yuborish rejimi.
Bu rejim:
- policy test qilish;
- mavjud sahifani buzmasdan kuzatish;
- qaysi resurslar bloklanishini oldindan bilish;
- CSP’ni bosqichma-bosqich joriy qilish uchun ishlatiladi.
Report-Only production tizimda policy sozlashni tekshirishga yordam beradi.
CSP va XSS
CSP XSS hujumlarini to‘liq yo‘q qilmaydi, lekin ularning ta’sirini kamaytiradi.
CSP XSSga qarshi:
- inline scriptlarni bloklaydi;
- begona script manbalarini cheklaydi;
evalishlatilishini bloklashi mumkin;- faqat ruxsat etilgan scriptlarga ishlashga ruxsat beradi.
XSS himoyasining asosiy qismi baribir input validation, sanitization va output escaping bilan bog‘liq.
CSP va frontend
Frontend ilovalarda CSP script, style, API va media manbalarini tartibga soladi.
Frontendda CSP quyidagilar bilan bog‘liq:
- SPA ilovalar;
- CDN scriptlar;
- analytics scriptlar;
- font manbalari;
- image storage;
- API domain;
- WebSocket endpoint;
- third-party widgetlar.
CSP noto‘g‘ri sozlansa, sahifadagi kerakli script yoki style ham bloklanishi mumkin.
Dasturlashdagi o‘rni
CSP web sahifada resurslar qayerdan yuklanishini nazorat qiluvchi browser xavfsizlik mexanizmidir. U XSS ta’sirini kamaytirish va tashqi resurslar ustidan nazorat o‘rnatish uchun ishlatiladi.
Bog‘liq tushunchalar
Web security, XSS, Browser, HTTP header, JavaScript, Inline script, Nonce, Hash, iframe, Frontend, Security