Content Security Policy va CMP-ingiz: CSP va rozilikni birga ishlatish
Kelishishi kerak boʻlgan ikki xavfsizlik qatlami
Content Security Policy (CSP) brauzerga sahifa skriptlar, uslublar, rasmlar, freymlar va tarmoq soʻrovlarini qaysi manbalardan yuklashi mumkinligini aytadi. Rozilikni boshqarish platformasi esa teskari ishni bajaradi: foydalanuvchi tanloviga koʻra bu skriptlardan qaysilari ishlashiga ruxsat berilishini hal qiladi. Ikkalasi alohida sozlanganda ular toʻqnashadi. CSP bloklagani uchun CMP yuklanmaydi yoki CSP CMP va reklama teglarini sigʻdirish uchun shu qadar boʻshatiladiki, u endi hech narsani himoya qilmaydi.
Ushbu qoʻllanma CMP odatda qaysi CSP direktivalarini talab qilishini, nonce-lar skript inyeksiyasi bilan qanday oʻzaro taʼsir qilishini va bannerni buzmasdan oʻzgarishlarni qanday joriy etishni tushuntiradi.
CMP odatda CSP-dan nimani talab qiladi
Aniq talablar sotuvchiga bogʻliq, shuning uchun har doim CMP-ingizning oʻz hujjatlaridan boshlang. Umuman, quyidagi direktivalarni tekshiring:
script-src— CMP skripti yuklanadigan domen va u yuklaydigan qoʻshimcha skript fayllari.connect-src— CMPfetchyoki XHR bilan chaqiradigan nuqtalar, masalan, sozlamalar, sotuvchilar roʻyxati, geolokatsiya va rozilik jurnali nuqtalari.style-src— uslublar domeni va, agar CMP<style>elementini kiritsa yoki uslub atributlarini oʻrnatsa, ehtimol inline uslublar.img-src— logotiplar, piktogrammalar va CMP ishlatadigan kuzatuvsiz piksellar.font-src— agar banner oʻz shriftlarini yuklasa.frame-src— agar CMP iframe-lardan foydalansa, masalan, domenlararo rozilik almashinuvi uchun.
TCF saytlarida CMP sahifada __tcfapiLocator nomli locator freymni ham yaratishini unutmang. Bu freym masofaviy manbasiz yaratiladi, shuning uchun odatda frame-src yozuvi talab qilinmaydi, ammo sinov paytida tasdiqlashga arziydi.
Inline stub muammosi
Aksariyat CMP-lar boshqa skriptlar asosiy CMP yuklanishidan oldin chaqiruvlarni navbatga qoʻya olishi uchun sahifa sarlavhasiga kichik inline skript — stub — joylashtirishni soʻraydi. Qatʼiy CSP siz aniq ruxsat bermaguningizcha inline skriptlarni bloklaydi. Sizda uchta variant bor:
- Nonce. Har bir javob uchun tasodifiy qiymat yarating, uni CSP sarlavhasiga
'nonce-...'sifatida va stub-ning<script>tegiga qoʻshing. Dinamik sahifalar uchun eng moslashuvchan variant. - Hash. Stub-ning aniq mazmunining SHA-256 hash-ini
script-srcga qoʻshing. Statik saytlar uchun yaxshi ishlaydi, ammo stub-dagi har qanday oʻzgarish, hatto boʻshliq ham, uni buzadi. - Stub-ni oʻz domeningizda tashqi fayl sifatida joylash va
'self'bilan qamrab olish. Uning yetarlicha erta yuklanishini taʼminlash ehtiyotkorlikni talab qiladi.
Yoʻl qisqartirish sifatida 'unsafe-inline'-dan saqlaning. U har bir inline skriptga ruxsat beradi va bu CSP taqdim etadigan himoyaning katta qismini yoʻqqa chiqaradi.
Nonce-lar va CMP kiritadigan skriptlar
Rozilikkacha skriptlarni bloklaydigan CMP koʻpincha ularni ushlab turib, keyinroq kiritish orqali ishlaydi. Nonce asosidagi CSP ostida bu kiritilgan skriptlarga ham ruxsat berilishi kerak. Ikki keng tarqalgan yondashuv bor:
- Nonce uzatish. CMP nonce-ni oʻz skript tegidan oʻqiydi va kiritadigan har bir skriptga qoʻshadi. CMP-ingiz buni qoʻllab-quvvatlashini tekshiring.
'strict-dynamic'. Bu kalit soʻz qoʻllab-quvvatlovchi brauzerlarga allaqachon ishonchli skript yuklagan skriptlarga ishonishni aytadi. U skriptlarni kiritadigan teg menejerlari va CMP-lar bilan ishlashni soddalashtiradi, lekin ishonchli har qanday skript boshqalarni yuklashi mumkinligini ham bildiradi, shuning uchun ehtiyotkorlik bilan ishoning.
Teg menejerlari ham xuddi shu savolni qoʻyadi. Agar reklama va analitika teglarini teg menejeri orqali yuklasangiz, uning nonce-lar boʻyicha hujjatlariga amal qiling va CMP hamda teg menejeri izchil yondashuvdan foydalanishiga ishonch hosil qiling.
Reklama teglari CSP-ni qiyinlashtiradi
Dasturiy reklama koʻplab domenlardan skriptlar va freymlar yuklaydi va roʻyxat talab hamkorlari oʻzgarishi bilan oʻzgaradi. Nashriyotchilar odatda ikki tanlovdan birini qiladi:
- Dasturiy reklamasiz sahifalarda qatʼiy CSP, reklama ishlaydigan joylarda esa kengroq siyosat.
- Boshqarish mumkin boʻlib qoladigan direktivalarga, masalan,
frame-ancestors,object-src 'none'vabase-uriga yoʻnaltirilgan, skript manbalari esa kengroq qoladigan siyosat.
Qanday boʻlmasin, CSP oʻzgarishi bannerni jimgina oʻchirib qoʻymasligi uchun CMP faqat joker belgi bilan emas, aniq ruxsat roʻyxatida boʻlishi kerak.
Report-only rejimida joriy eting
Avval Content-Security-Policy-Report-Only sarlavhasidan foydalaning. Brauzer hech narsani bloklamasdan buzilishlar haqida xabar beradi, shunda yangi siyosat nimani buzishini koʻrishingiz mumkin.
- Siyosatni hisobot nuqtasi bilan report-only rejimida joylashtiring.
- Sahifalarni toza brauzer profillarida yuklang va butun rozilik oqimidan oʻting: birinchi tashrif, hammasini qabul qilish, hammasini rad etish, maxsus tanlov, qaytarib olish.
- Bloklangan CMP resurslari uchun buzilish hisobotlari va brauzer konsolini koʻrib chiqing.
- Siyosatni sozlang, soʻng majburiy qoʻllashga oʻting.
- Orqaga qaytishlarni ushlash uchun majburiy qoʻllashdan keyin ham hisobotni yoqiq saqlang.
CSP toʻqnashuvi belgilari
- Banner hech qachon paydo boʻlmaydi va konsol CMP skripti uchun CSP buzilishini koʻrsatadi.
- Banner paydo boʻladi, lekin uslubsiz, chunki
style-srcuning CSS-ini bloklaydi. - Tanlovlar saqlanmaydi, chunki
connect-srcrozilik jurnali chaqiruvini bloklaydi. - Rozilikdan keyin reklama yoki analitika hech qachon yuklanmaydi, chunki kiritilgan skriptlarda nonce yoʻq.
__tcfapianiqlanmagan, chunki inline stub bloklangan.
Asosiy xulosalar
- CMP-ingiz uchun
script-src,connect-src,style-src,img-srcvaframe-srcni tekshiring. - Inline stub-ga
'unsafe-inline'bilan emas, nonce yoki hash bilan ruxsat bering. - Rozilikdan keyin kiritiladigan skriptlar nonce olishiga yoki
'strict-dynamic'bilan qamrab olinishiga ishonch hosil qiling. - Majburiy qoʻllashdan oldin har bir rozilik yoʻlini report-only rejimida sinang.
- CSP oʻzgarishlari uni oʻchira olmasligi uchun CMP-ni aniq ruxsat roʻyxatida saqlang.