Content Security Policy na CMP Yako: Kufanya CSP na Idhini Zifanye Kazi Pamoja
Tabaka Mbili za Usalama Zinazopaswa Kukubaliana
Content Security Policy (CSP) huambia kivinjari ni vyanzo gani ukurasa unaruhusiwa kupakia hati, mitindo, picha, fremu na maombi ya mtandao. Jukwaa la usimamizi wa idhini hufanya kazi kinyume: huamua ni hati zipi kati ya hizo zinaruhusiwa kuendeshwa kulingana na chaguo la mtumiaji. Vikisanidiwa kando, vinagongana. CMP inashindwa kupakia kwa sababu CSP inaizuia, au CSP inalegezwa sana kuhudumia CMP na lebo za matangazo hivi kwamba haikingi chochote tena.
Mwongozo huu unaeleza ni maagizo gani ya CSP ambayo CMP kwa kawaida inahitaji, jinsi nonce zinavyoingiliana na uingizaji wa hati, na jinsi ya kuzindua mabadiliko bila kuvunja bango lako.
Kile CMP Kwa Kawaida Inachohitaji kutoka kwa CSP
Mahitaji kamili hutegemea muuzaji, kwa hivyo anza daima na nyaraka za CMP yako mwenyewe. Kwa ujumla, kagua maagizo haya:
script-src— kikoa ambacho hati ya CMP inapakiwa kutoka, pamoja na faili zozote za ziada za hati inazopakia.connect-src— vituo ambavyo CMP inaviita kwafetchau XHR, kama usanidi, orodha ya wauzaji, eneo la kijiografia na vituo vya kurekodi idhini.style-src— kikoa cha laha ya mitindo, na labda mitindo ya ndani ya mstari ikiwa CMP inaingiza kipengele cha<style>au kuweka sifa za mtindo.img-src— nembo, ikoni na pikseli zozote zisizo na ufuatiliaji ambazo CMP inatumia.font-src— ikiwa bango linapakia fonti zake.frame-src— ikiwa CMP inatumia iframe, kwa mfano kwa kushiriki idhini kuvuka vikoa.
Kwenye tovuti za TCF, kumbuka kwamba CMP pia huunda fremu ya kutafuta iitwayo __tcfapiLocator kwenye ukurasa. Fremu hiyo huundwa bila chanzo cha mbali, kwa hivyo kwa kawaida haihitaji kiingilio cha frame-src, lakini inafaa kuthibitishwa wakati wa majaribio.
Tatizo la Stub ya Ndani ya Mstari
CMP nyingi hukuomba uweke hati ndogo ya ndani ya mstari — stub — kwenye kichwa cha ukurasa, ili hati nyingine ziweze kuweka miito kwenye foleni kabla CMP kuu haijapakiwa. CSP kali huzuia hati za ndani ya mstari isipokuwa uziruhusu waziwazi. Una chaguo tatu:
- Nonce. Tengeneza thamani nasibu kwa kila jibu, iongeze kwenye kichwa cha CSP kama
'nonce-...'na kwenye lebo ya<script>ya stub. Hiki ndicho chaguo linalobadilika zaidi kwa kurasa zinazobadilika. - Hash. Ongeza hash ya SHA-256 ya yaliyomo kamili ya stub kwenye
script-src. Hii inafanya kazi vizuri kwa tovuti tuli, lakini mabadiliko yoyote ya stub, hata nafasi tupu, huivunja. - Kuiweka stub kwenye seva yako kama faili ya nje kwenye kikoa chako mwenyewe, inayofunikwa na
'self'. Hii inahitaji uangalifu ili iendelee kupakia mapema vya kutosha.
Epuka 'unsafe-inline' kama njia ya mkato. Inaruhusu kila hati ya ndani ya mstari, jambo linaloondoa sehemu kubwa ya ulinzi ambao CSP hutoa.
Nonce na Hati Ambazo CMP Inaziingiza
CMP inayozuia hati hadi idhini mara nyingi hufanya kazi kwa kuzishikilia na kuziingiza baadaye. Chini ya CSP inayotegemea nonce, hati hizo zilizoingizwa pia zinahitaji kuruhusiwa. Kuna mbinu mbili za kawaida:
- Kusambaza nonce. CMP husoma nonce kutoka kwa lebo yake ya hati na kuiongeza kwa kila hati inayoiingiza. Kagua kama CMP yako inaunga mkono hili.
'strict-dynamic'. Neno hili muhimu huvielekeza vivinjari vinavyolitambua kuamini hati zinazopakiwa na hati ambayo tayari inaaminika. Hurahisisha maisha na wasimamizi wa lebo na CMP zinazoingiza hati, lakini pia inamaanisha hati yoyote unayoiamini inaweza kupakia nyingine, kwa hivyo amini kwa uangalifu.
Wasimamizi wa lebo huibua swali lilelile. Ikiwa unapakia lebo za matangazo na uchanganuzi kupitia msimamizi wa lebo, fuata nyaraka zake kuhusu nonce na uhakikishe CMP na msimamizi wa lebo vinatumia mbinu thabiti.
Lebo za Matangazo Hufanya CSP Kuwa Ngumu Zaidi
Matangazo ya kiprogramu hupakia hati na fremu kutoka vikoa vingi, na orodha hubadilika washirika wa mahitaji wanapobadilika. Wachapishaji kwa kawaida hufanya mojawapo ya chaguo mbili:
- CSP kali kwenye kurasa zisizo na matangazo ya kiprogramu, na sera pana zaidi pale matangazo yanapoendeshwa.
- Sera inayolenga maagizo yanayobaki rahisi kusimamia, kama
frame-ancestors,object-src 'none'nabase-uri, huku vyanzo vya hati vikibaki pana zaidi.
Vyovyote vile, CMP inapaswa kuwa kwenye orodha ya kuruhusiwa waziwazi, si kufunikwa na kadi-mwitu pekee, ili badiliko la CSP lisizime bango kimya kimya.
Zindua kwa Hali ya Report-Only
Tumia kichwa cha Content-Security-Policy-Report-Only kwanza. Kivinjari huripoti ukiukaji bila kuzuia chochote, ili uweze kuona sera mpya ingevunja nini.
- Weka sera katika hali ya report-only pamoja na kituo cha kuripoti.
- Pakia kurasa katika wasifu safi wa kivinjari na upitie mtiririko mzima wa idhini: ziara ya kwanza, kubali yote, kataa yote, chaguo maalum, kuondoa idhini.
- Kagua ripoti za ukiukaji na koni ya kivinjari kwa rasilimali za CMP zilizozuiwa.
- Rekebisha sera, kisha ubadilishe kwenda utekelezaji.
- Endelea kuwasha kuripoti baada ya utekelezaji ili kunasa kurudi nyuma.
Dalili za Mgongano wa CSP
- Bango halionekani kamwe, na koni inaonyesha ukiukaji wa CSP kwa hati ya CMP.
- Bango linaonekana lakini halina mitindo, kwa sababu
style-srcinazuia CSS yake. - Chaguo hazihifadhiwi, kwa sababu
connect-srcinazuia mwito wa kurekodi idhini. - Matangazo au uchanganuzi havipakii kamwe baada ya idhini, kwa sababu hati zilizoingizwa hazina nonce.
__tcfapihaijafafanuliwa, kwa sababu stub ya ndani ya mstari ilizuiwa.
Mambo Muhimu ya Kukumbuka
- Kagua
script-src,connect-src,style-src,img-srcnaframe-srckwa CMP yako. - Ruhusu stub ya ndani ya mstari kwa nonce au hash, si
'unsafe-inline'. - Hakikisha hati zinazoingizwa baada ya idhini zinapata nonce au zinafunikwa na
'strict-dynamic'. - Jaribu kila njia ya idhini katika hali ya report-only kabla ya kutekeleza.
- Weka CMP kwenye orodha ya kuruhusiwa waziwazi ili mabadiliko ya CSP yasiweze kuizima.