Content Security Policy மற்றும் உங்கள் CMP: CSP-யையும் ஒப்புதலையும் இணைந்து செயல்பட வைத்தல்
இணங்க வேண்டிய இரண்டு பாதுகாப்பு அடுக்குகள்
Content Security Policy (CSP) ஒரு பக்கம் ஸ்கிரிப்ட்கள், ஸ்டைல்கள், படங்கள், ஃபிரேம்கள், நெட்வொர்க் கோரிக்கைகளை எந்த மூலங்களிலிருந்து ஏற்றலாம் என்று உலாவிக்குக் கூறுகிறது. ஒப்புதல் மேலாண்மைத் தளம் எதிர்மாறான வேலையைச் செய்கிறது: பயனரின் தேர்வின் அடிப்படையில் அந்த ஸ்கிரிப்ட்களில் எவை இயங்க அனுமதிக்கப்படுகின்றன என்பதை முடிவு செய்கிறது. இரண்டும் தனித்தனியாகக் கட்டமைக்கப்படும்போது மோதுகின்றன. CSP தடுப்பதால் CMP ஏற்றப்படுவதில்லை, அல்லது CMP-யையும் விளம்பர டேக்களையும் இடமளிக்க CSP எவ்வளவு தளர்த்தப்படுகிறதெனில் அது எதையுமே பாதுகாப்பதில்லை.
CMP-க்குப் பொதுவாக எந்த CSP டைரக்டிவ்கள் தேவை, ஸ்கிரிப்ட் உட்செலுத்தலுடன் நான்ஸ்கள் எவ்வாறு தொடர்புகொள்கின்றன, பேனரை உடைக்காமல் மாற்றங்களை எவ்வாறு வெளியிடுவது என்பதை இந்த வழிகாட்டி விளக்குகிறது.
CSP-யிடமிருந்து CMP பொதுவாக எதை எதிர்பார்க்கிறது
சரியான தேவைகள் விற்பனையாளரைப் பொறுத்தவை; எனவே எப்போதும் உங்கள் CMP-யின் சொந்த ஆவணங்களிலிருந்து தொடங்குங்கள். பொதுவாக, இந்த டைரக்டிவ்களைச் சரிபாருங்கள்:
script-src— CMP ஸ்கிரிப்ட் ஏற்றப்படும் டொமைன், மேலும் அது ஏற்றும் கூடுதல் ஸ்கிரிப்ட் கோப்புகள்.connect-src— CMPfetchஅல்லது XHR மூலம் அழைக்கும் எண்ட்பாயிண்ட்கள், எ.கா. கட்டமைப்பு, விற்பனையாளர் பட்டியல், புவியிடம், ஒப்புதல் பதிவு எண்ட்பாயிண்ட்கள்.style-src— ஸ்டைல்ஷீட் டொமைன், CMP<style>உறுப்பை உட்செலுத்தினால் அல்லது ஸ்டைல் பண்புகளை அமைத்தால் இன்லைன் ஸ்டைல்களும்.img-src— லோகோக்கள், ஐகான்கள், CMP பயன்படுத்தும் கண்காணிப்பற்ற பிக்சல்கள்.font-src— பேனர் தனது சொந்த எழுத்துருக்களை ஏற்றினால்.frame-src— CMP iframe-களைப் பயன்படுத்தினால், எ.கா. டொமைன்களுக்கிடையே ஒப்புதலைப் பகிர.
TCF தளங்களில், CMP பக்கத்தில் __tcfapiLocator என்ற பெயருடைய லொக்கேட்டர் ஃபிரேமையும் உருவாக்குகிறது என்பதை நினைவில் கொள்ளுங்கள். அந்த ஃபிரேம் தொலைநிலை மூலம் இல்லாமல் உருவாக்கப்படுகிறது, எனவே பொதுவாக அதற்கு frame-src பதிவு தேவையில்லை; இருப்பினும் சோதனையில் உறுதிசெய்வது நல்லது.
இன்லைன் ஸ்டப் சிக்கல்
பெரும்பாலான CMP-கள் பக்கத்தின் ஹெட்டில் ஒரு சிறிய இன்லைன் ஸ்கிரிப்ட்டை — ஸ்டப்பை — வைக்கச் சொல்கின்றன; இதனால் முதன்மை CMP ஏற்றப்படுவதற்கு முன் பிற ஸ்கிரிப்ட்கள் அழைப்புகளை வரிசையில் நிறுத்தலாம். கடுமையான CSP, நீங்கள் வெளிப்படையாக அனுமதிக்காத வரை இன்லைன் ஸ்கிரிப்ட்களைத் தடுக்கிறது. உங்களுக்கு மூன்று வழிகள் உள்ளன:
- நான்ஸ். ஒவ்வொரு பதிலுக்கும் ஒரு சீரற்ற மதிப்பை உருவாக்கி, CSP ஹெடரில்
'nonce-...'ஆகவும், ஸ்டப்பின்<script>டேக்கிலும் சேர்க்கவும். மாறும் பக்கங்களுக்கு இதுவே மிக நெகிழ்வான வழி. - ஹாஷ். ஸ்டப்பின் துல்லியமான உள்ளடக்கத்தின் SHA-256 ஹாஷை
script-src-இல் சேர்க்கவும். நிலையான தளங்களுக்கு இது நன்றாக வேலை செய்கிறது, ஆனால் ஸ்டப்பில் எந்த மாற்றமும், வெற்றிடமும் கூட, இதை உடைத்துவிடும். - ஸ்டப்பைச் சுயமாக ஹோஸ்ட் செய்தல், உங்கள் சொந்த டொமைனில் வெளிப்புறக் கோப்பாக,
'self'அதை உள்ளடக்கும். போதிய அளவு முன்கூட்டியே ஏற்றப்படுவதை உறுதிசெய்ய இதற்குக் கவனம் தேவை.
குறுக்குவழியாக 'unsafe-inline'-ஐத் தவிர்க்கவும். இது ஒவ்வொரு இன்லைன் ஸ்கிரிப்ட்டையும் அனுமதிக்கிறது; CSP வழங்கும் பாதுகாப்பின் பெரும்பகுதி போய்விடுகிறது.
நான்ஸ்களும் CMP உட்செலுத்தும் ஸ்கிரிப்ட்களும்
ஒப்புதல் கிடைக்கும் வரை ஸ்கிரிப்ட்களைத் தடுக்கும் CMP, பெரும்பாலும் அவற்றைப் பிடித்து வைத்து பின்னர் உட்செலுத்தும் முறையில் செயல்படுகிறது. நான்ஸ் அடிப்படையிலான CSP-இல் அவ்வாறு உட்செலுத்தப்படும் ஸ்கிரிப்ட்களும் அனுமதிக்கப்பட வேண்டும். இரண்டு பொதுவான அணுகுமுறைகள்:
- நான்ஸ் பரப்புதல். CMP தனது சொந்த ஸ்கிரிப்ட் டேக்கிலிருந்து நான்ஸைப் படித்து, தான் உட்செலுத்தும் ஒவ்வொரு ஸ்கிரிப்ட்டிலும் சேர்க்கிறது. உங்கள் CMP இதை ஆதரிக்கிறதா எனச் சரிபாருங்கள்.
'strict-dynamic'. ஏற்கெனவே நம்பப்படும் ஸ்கிரிப்ட் ஏற்றும் ஸ்கிரிப்ட்களை நம்பும்படி ஆதரிக்கும் உலாவிகளுக்கு இந்தச் சொல் கூறுகிறது. டேக் மேலாளர்கள், ஸ்கிரிப்ட்களை உட்செலுத்தும் CMP-கள் ஆகியவற்றுடன் வேலையை எளிதாக்குகிறது; ஆனால் நீங்கள் நம்பும் எந்த ஸ்கிரிப்ட்டும் பிறவற்றை ஏற்றலாம் என்பதையும் இது குறிக்கிறது, எனவே கவனமாக நம்புங்கள்.
டேக் மேலாளர்களும் இதே கேள்வியை எழுப்புகின்றன. விளம்பர மற்றும் பகுப்பாய்வு டேக்களை டேக் மேலாளர் மூலம் ஏற்றினால், நான்ஸ் குறித்த அதன் ஆவணங்களைப் பின்பற்றி, CMP-யும் டேக் மேலாளரும் ஒரே அணுகுமுறையைப் பயன்படுத்துவதை உறுதிசெய்யுங்கள்.
விளம்பர டேக்கள் CSP-யைக் கடினமாக்குகின்றன
நிரல்வழி விளம்பரம் பல டொமைன்களிலிருந்து ஸ்கிரிப்ட்களையும் ஃபிரேம்களையும் ஏற்றுகிறது; தேவை கூட்டாளர்கள் மாறும்போது பட்டியலும் மாறுகிறது. வெளியீட்டாளர்கள் பொதுவாக இரண்டில் ஒன்றைத் தேர்கிறார்கள்:
- நிரல்வழி விளம்பரங்கள் இல்லாத பக்கங்களில் கடுமையான CSP, விளம்பரங்கள் இயங்கும் இடங்களில் விரிவான கொள்கை.
frame-ancestors,object-src 'none',base-uriபோன்ற நிர்வகிக்கக்கூடிய டைரக்டிவ்களில் கவனம் செலுத்தும் கொள்கை; ஸ்கிரிப்ட் மூலங்கள் விரிவாக இருக்கும்.
எப்படியிருந்தாலும், CSP-யில் ஏற்படும் மாற்றம் பேனரை அமைதியாக முடக்கிவிடாமல் இருக்க, CMP வைல்ட்கார்டு மட்டுமே உள்ளடக்காமல் வெளிப்படையான அனுமதிப் பட்டியலில் இருக்க வேண்டும்.
Report-Only பயன்முறையில் வெளியிடுங்கள்
முதலில் Content-Security-Policy-Report-Only ஹெடரைப் பயன்படுத்துங்கள். உலாவி எதையும் தடுக்காமல் மீறல்களைப் புகாரளிக்கிறது; புதிய கொள்கை எதை உடைக்கும் என்பதை நீங்கள் பார்க்கலாம்.
- கொள்கையை அறிக்கையிடல் எண்ட்பாயிண்ட்டுடன் report-only பயன்முறையில் வரிசைப்படுத்துங்கள்.
- தூய்மையான உலாவி சுயவிவரங்களில் பக்கங்களை ஏற்றி, முழு ஒப்புதல் ஓட்டத்தையும் இயக்குங்கள்: முதல் வருகை, அனைத்தையும் ஏற்றல், அனைத்தையும் நிராகரித்தல், தனிப்பயன் தேர்வு, திரும்பப் பெறுதல்.
- தடுக்கப்பட்ட CMP வளங்களுக்கான மீறல் அறிக்கைகளையும் உலாவிக் கன்சோலையும் மதிப்பாய்வு செய்யுங்கள்.
- கொள்கையைச் சரிசெய்து, பிறகு அமலாக்கத்துக்கு மாறுங்கள்.
- பின்னடைவுகளைப் பிடிக்க, அமலாக்கத்துக்குப் பிறகும் அறிக்கையிடலை இயக்கத்தில் வையுங்கள்.
CSP மோதலின் அறிகுறிகள்
- பேனர் ஒருபோதும் தோன்றுவதில்லை; கன்சோல் CMP ஸ்கிரிப்ட்டுக்கான CSP மீறலைக் காட்டுகிறது.
- பேனர் தோன்றுகிறது ஆனால் ஸ்டைல் இல்லாமல், ஏனெனில்
style-srcஅதன் CSS-ஐத் தடுக்கிறது. - தேர்வுகள் சேமிக்கப்படுவதில்லை, ஏனெனில்
connect-srcஒப்புதல் பதிவு அழைப்பைத் தடுக்கிறது. - ஒப்புதலுக்குப் பிறகு விளம்பரங்கள் அல்லது பகுப்பாய்வு ஒருபோதும் ஏற்றப்படுவதில்லை, ஏனெனில் உட்செலுத்தப்பட்ட ஸ்கிரிப்ட்களுக்கு நான்ஸ் இல்லை.
__tcfapiவரையறுக்கப்படவில்லை, ஏனெனில் இன்லைன் ஸ்டப் தடுக்கப்பட்டது.
முக்கியக் குறிப்புகள்
- உங்கள் CMP-க்கு
script-src,connect-src,style-src,img-src,frame-srcஆகியவற்றைச் சரிபாருங்கள். - இன்லைன் ஸ்டப்பை நான்ஸ் அல்லது ஹாஷ் மூலம் அனுமதிக்கவும்,
'unsafe-inline'மூலம் அல்ல. - ஒப்புதலுக்குப் பிறகு உட்செலுத்தப்படும் ஸ்கிரிப்ட்கள் நான்ஸைப் பெறுவதை அல்லது
'strict-dynamic'மூலம் உள்ளடக்கப்படுவதை உறுதிசெய்யுங்கள். - அமல்படுத்துவதற்கு முன் report-only பயன்முறையில் ஒவ்வொரு ஒப்புதல் பாதையையும் சோதியுங்கள்.
- CSP மாற்றங்கள் அதை முடக்க முடியாதபடி CMP-யை வெளிப்படையாக அனுமதிப் பட்டியலில் வையுங்கள்.