குறுக்கு-தள ஸ்கிரிப்டிங் (XSS) மற்றும் தரவு உட்செலுத்துதல் போன்ற பொதுவான தாக்குதல்களுக்கு எதிராக உங்கள் வலைச் செயலியின் பாதுகாப்பை வியத்தகு முறையில் மேம்படுத்த, ஜாவாஸ்கிரிப்ட் உள்ளடக்கப் பாதுகாப்புக் கொள்கையை (CSP) எவ்வாறு செயல்படுத்துவது மற்றும் பயன்படுத்துவது என்பதை அறிக.
உங்கள் வலைச் செயலிகளை வலுப்படுத்துதல்: ஜாவாஸ்கிரிப்ட் உள்ளடக்கப் பாதுகாப்புக் கொள்கை (CSP) பற்றிய ஒரு ஆழமான பார்வை
இன்றைய ஒன்றோடொன்று இணைக்கப்பட்ட டிஜிட்டல் உலகில், வலைச் செயலி பாதுகாப்பு மிக முக்கியமானது. தீங்கிழைக்கும் நபர்கள் சுரண்டுவதற்கான பாதிப்புகளை தொடர்ந்து தேடுகிறார்கள், மேலும் ஒரு வெற்றிகரமான தாக்குதல் தரவு மீறல்கள், நிதி இழப்புகள் மற்றும் கடுமையான நற்பெயர் சேதத்திற்கு வழிவகுக்கும். குறுக்கு-தள ஸ்கிரிப்டிங் (XSS) மற்றும் தரவு உட்செலுத்துதல் போன்ற பொதுவான வலை அச்சுறுத்தல்களுக்கு எதிரான மிகச் சிறந்த பாதுகாப்புகளில் ஒன்று, வலுவான பாதுகாப்பு தலைப்புகளை செயல்படுத்துவதாகும். இவற்றில், உள்ளடக்கப் பாதுகாப்புக் கொள்கை (CSP) ஒரு சக்திவாய்ந்த கருவியாக தனித்து நிற்கிறது, குறிப்பாக ஜாவாஸ்கிரிப்ட் செயல்பாட்டைக் கையாளும் போது.
இந்த விரிவான வழிகாட்டி ஜாவாஸ்கிரிப்ட் உள்ளடக்கப் பாதுகாப்புக் கொள்கையை செயல்படுத்துதல் மற்றும் நிர்வகிப்பதன் நுணுக்கங்கள் மூலம் உங்களை வழிநடத்தும், உலகளாவிய பார்வையாளர்களுக்கான செயல் நுண்ணறிவு மற்றும் நடைமுறை எடுத்துக்காட்டுகளை வழங்கும். நீங்கள் ஒரு அனுபவமிக்க டெவலப்பராக இருந்தாலும் அல்லது வலைப் பாதுகாப்பில் உங்கள் பயணத்தைத் தொடங்கினாலும், CSP-ஐப் புரிந்துகொள்வது அதிக நெகிழ்வான வலைச் செயலிகளை உருவாக்குவதில் ஒரு முக்கியமான படியாகும்.
உள்ளடக்கப் பாதுகாப்புக் கொள்கை (CSP) என்றால் என்ன?
உள்ளடக்கப் பாதுகாப்புக் கொள்கை (CSP) என்பது குறுக்கு-தள ஸ்கிரிப்டிங் (XSS) மற்றும் தரவு உட்செலுத்துதல் தாக்குதல்கள் உள்ளிட்ட சில வகையான தாக்குதல்களைக் கண்டறிந்து தணிக்க உதவும் ஒரு கூடுதல் பாதுகாப்பு அடுக்கு ஆகும். இது ஒரு HTTP மறுமொழி தலைப்பு ஆகும், இது ஒரு குறிப்பிட்ட பக்கத்திற்கு எந்த டைனமிக் வளங்களை (ஸ்கிரிப்டுகள், ஸ்டைல்ஷீட்கள், படங்கள் போன்றவை) ஏற்ற அனுமதிக்கப்படுகிறது என்பதை உலாவிக்குத் தெரிவிக்கிறது. அனுமதிக்கப்பட்ட மூலங்களின் வெள்ளைப் பட்டியலைக் குறிப்பிடுவதன் மூலம், CSP உங்கள் வலைச் செயலியின் தாக்குதல் பரப்பை கணிசமாகக் குறைக்கிறது.
CSP-ஐ உங்கள் வலைப்பக்கத்திற்கான ஒரு கடுமையான வாயிற்காப்பாளராக நினைத்துப் பாருங்கள். எந்த ஸ்கிரிப்டையும் செயலற்ற முறையில் இயங்க அனுமதிப்பதற்குப் பதிலாக, ஸ்கிரிப்டுகள் எங்கிருந்து தோன்ற அனுமதிக்கப்படுகின்றன என்பதை நீங்கள் வெளிப்படையாக வரையறுக்கிறீர்கள். ஒரு ஸ்கிரிப்ட் அங்கீகரிக்கப்படாத மூலத்திலிருந்து ஏற்ற முயற்சித்தால், உலாவி அதைத் தடுக்கும், சாத்தியமான தீங்கிழைக்கும் செயல்பாட்டைத் தடுக்கும்.
ஜாவாஸ்கிரிப்ட் பாதுகாப்பிற்கு CSP ஏன் முக்கியமானது?
ஜாவாஸ்கிரிப்ட், ஊடாடும் மற்றும் டைனமிக் வலை அனுபவங்களின் முதுகெலும்பாக இருப்பதால், தாக்குபவர்களுக்கு ஒரு முக்கிய இலக்காகவும் உள்ளது. தீங்கிழைக்கும் ஜாவாஸ்கிரிப்ட் செய்யக்கூடியவை:
- முக்கியமான பயனர் தகவல்களைத் திருடுதல் (எ.கா., குக்கீகள், அமர்வு டோக்கன்கள், தனிப்பட்ட தரவு).
- ஃபிஷிங் தளங்களுக்கு பயனர்களைத் திசை திருப்புதல்.
- பயனரின் அனுமதியின்றி அவர்கள் சார்பாக செயல்களைச் செய்தல்.
- தேவையற்ற உள்ளடக்கம் அல்லது விளம்பரங்களை உட்செலுத்துதல்.
- கிரிப்டோகரன்சியை வெட்டுவதற்கு பயனர்களின் உலாவிகளை கிரிப்டோஜாக் செய்தல்.
குறிப்பாக XSS தாக்குதல்கள், பெரும்பாலும் தீங்கிழைக்கும் ஜாவாஸ்கிரிப்டை வலைப்பக்கங்களில் உட்செலுத்துவதை நம்பியுள்ளன. ஜாவாஸ்கிரிப்ட் எங்கிருந்து இயக்கப்படலாம் என்பதைக் கட்டுப்படுத்துவதன் மூலம் CSP இதை நேரடியாக எதிர்த்துப் போராடுகிறது. இயல்பாக, உலாவிகள் இன்லைன் ஸ்கிரிப்டுகள் மற்றும் டைனமிக் முறையில் மதிப்பிடப்பட்ட ஜாவாஸ்கிரிப்டை (eval()
போன்றவை) அனுமதிக்கின்றன. இவை XSS-க்கான பொதுவான வெக்டர்கள். இந்த ஆபத்தான அம்சங்களை முடக்கவும், கடுமையான கட்டுப்பாடுகளை அமல்படுத்தவும் CSP உங்களை அனுமதிக்கிறது.
CSP எவ்வாறு செயல்படுகிறது: `Content-Security-Policy` தலைப்பு
உங்கள் வலை சேவையகத்திலிருந்து உலாவிக்கு Content-Security-Policy
HTTP தலைப்பை அனுப்புவதன் மூலம் CSP செயல்படுத்தப்படுகிறது. இந்த தலைப்பில் பாதுகாப்புக் கொள்கையை வரையறுக்கும் வழிமுறைகளின் தொகுப்பு உள்ளது. ஒவ்வொரு வழிமுறையும் ஒரு குறிப்பிட்ட வகை வளத்தை ஏற்றுவதையோ அல்லது செயல்படுத்துவதையோ கட்டுப்படுத்துகிறது.
இங்கே ஒரு CSP தலைப்பின் அடிப்படை அமைப்பு:
Content-Security-Policy: directive1 value1 value2; directive2 value3; ...
ஜாவாஸ்கிரிப்ட் பாதுகாப்பிற்கு தொடர்புடைய முக்கிய வழிமுறைகளை விரிவாகப் பார்ப்போம்:
ஜாவாஸ்கிரிப்ட் பாதுகாப்பிற்கான முக்கிய வழிமுறைகள்
script-src
இது ஜாவாஸ்கிரிப்ட் பாதுகாப்பிற்கான மிக முக்கியமான வழிமுறையாகும். இது ஜாவாஸ்கிரிப்ட்டிற்கான அனுமதிக்கப்பட்ட மூலங்களை வரையறுக்கிறது. இயல்பாக, script-src
வரையறுக்கப்படாவிட்டால், உலாவிகள் default-src
வழிமுறைக்குத் திரும்பும். இரண்டும் வரையறுக்கப்படாவிட்டால், அனைத்து மூலங்களும் அனுமதிக்கப்படுகின்றன, இது மிகவும் பாதுகாப்பற்றது.
எடுத்துக்காட்டுகள்:
script-src 'self';
: ஆவணத்தின் அதே மூலத்திலிருந்து மட்டுமே ஸ்கிரிப்டுகளை ஏற்ற அனுமதிக்கிறது.script-src 'self' https://cdn.example.com;
: அதே மூலத்திலிருந்தும்https://cdn.example.com
இல் உள்ள CDN-லிருந்தும் ஸ்கிரிப்டுகளை அனுமதிக்கிறது.script-src 'self' 'unsafe-inline' 'unsafe-eval';
: மிகுந்த எச்சரிக்கையுடன் பயன்படுத்தவும்! இது இன்லைன் ஸ்கிரிப்டுகள் மற்றும் `eval()`-ஐ அனுமதிக்கிறது ஆனால் பாதுகாப்பை கணிசமாக பலவீனப்படுத்துகிறது. आदर्शமாக, நீங்கள்'unsafe-inline'
மற்றும்'unsafe-eval'
-ஐத் தவிர்க்க வேண்டும்.script-src 'self' *.google.com;
: அதே மூலத்திலிருந்தும்google.com
-ன் எந்தவொரு துணை டொமைனிலிருந்தும் ஸ்கிரிப்டுகளை அனுமதிக்கிறது.
default-src
இந்த வழிமுறை வெளிப்படையாக வரையறுக்கப்படாத பிற வள வகைகளுக்கான ஒரு பின்னடைவாக செயல்படுகிறது. உதாரணமாக, script-src
குறிப்பிடப்படவில்லை என்றால், default-src
ஸ்கிரிப்டுகளுக்குப் பொருந்தும். ஒரு அடிப்படை பாதுகாப்பு அளவை அமைக்க default-src
-ஐ வரையறுப்பது ஒரு நல்ல நடைமுறை.
எடுத்துக்காட்டு:
default-src 'self'; script-src 'self' https://cdn.example.com;
இந்த எடுத்துக்காட்டில், அனைத்து வளங்களும் (படங்கள், ஸ்டைல்ஷீட்கள், எழுத்துருக்கள் போன்றவை) அதே மூலத்திலிருந்து மட்டுமே ஏற்றுவதற்கு இயல்புநிலையாக இருக்கும். இருப்பினும், ஸ்கிரிப்டுகள் ஒரு தளர்வான கொள்கையைக் கொண்டுள்ளன, அவை அதே மூலத்திலிருந்தும் குறிப்பிட்ட CDN-லிருந்தும் அனுமதிக்கப்படுகின்றன.
base-uri
இந்த வழிமுறை ஒரு ஆவணத்தின் <base>
குறிச்சொல்லில் பயன்படுத்தக்கூடிய URL-களை கட்டுப்படுத்துகிறது. ஒரு <base>
குறிச்சொல், ஸ்கிரிப்ட் மூலங்கள் உட்பட, ஒரு பக்கத்தில் உள்ள அனைத்து சார்பு URL-களுக்கும் அடிப்படை URL-ஐ மாற்ற முடியும். இதைக் கட்டுப்படுத்துவது, சார்பு ஸ்கிரிப்ட் பாதைகள் எங்கு தீர்க்கப்படுகின்றன என்பதை ஒரு தாக்குபவர் கையாளுவதைத் தடுக்கிறது.
எடுத்துக்காட்டு:
base-uri 'self';
இது <base>
குறிச்சொல் அதே மூலத்திற்கு மட்டுமே அமைக்கப்பட முடியும் என்பதை உறுதி செய்கிறது.
object-src
இந்த வழிமுறை Flash, Java applets போன்ற எந்த வகையான செருகுநிரல்களை ஏற்றலாம் என்பதைக் கட்டுப்படுத்துகிறது. இதை 'none'
என அமைப்பது மிகவும் முக்கியம், ஏனெனில் செருகுநிரல்கள் பெரும்பாலும் காலாவதியானவை மற்றும் குறிப்பிடத்தக்க பாதுகாப்பு அபாயங்களைக் கொண்டுள்ளன. நீங்கள் எந்த செருகுநிரல்களையும் பயன்படுத்தவில்லை என்றால், இதை 'none'
என அமைப்பது ஒரு வலுவான பாதுகாப்பு நடவடிக்கையாகும்.
எடுத்துக்காட்டு:
object-src 'none';
upgrade-insecure-requests
இந்த வழிமுறை உலாவிகளுக்கு கோரிக்கைகளை HTTPS-க்கு மேம்படுத்த அறிவுறுத்துகிறது. உங்கள் தளம் HTTPS-ஐ ஆதரித்தாலும், கலப்பு உள்ளடக்க சிக்கல்களைக் கொண்டிருக்கலாம் (எ.கா., HTTP வழியாக வளங்களை ஏற்றுதல்), இந்த வழிமுறை அந்த பாதுகாப்பற்ற கோரிக்கைகளை தானாகவே பாதுகாப்பானதாக மாற்ற உதவும், கலப்பு உள்ளடக்க எச்சரிக்கைகள் மற்றும் சாத்தியமான பாதிப்புகளைத் தடுக்கும்.
எடுத்துக்காட்டு:
upgrade-insecure-requests;
report-uri
/ report-to
உங்கள் CSP-ஐக் கண்காணிப்பதற்கும் பிழைத்திருத்துவதற்கும் இந்த வழிமுறைகள் மிக முக்கியமானவை. ஒரு உலாவி உங்கள் CSP-ன் மீறலை எதிர்கொள்ளும்போது (எ.கா., ஒரு ஸ்கிரிப்ட் தடுக்கப்படும்போது), அது ஒரு குறிப்பிட்ட URL-க்கு ஒரு JSON அறிக்கையை அனுப்ப முடியும். இது உங்கள் கொள்கையில் சாத்தியமான தாக்குதல்கள் அல்லது தவறான உள்ளமைவுகளை அடையாளம் காண உங்களை அனுமதிக்கிறது.
report-uri
: பழைய, பரவலாக ஆதரிக்கப்படும் வழிமுறை.report-to
: புதிய, அதிக நெகிழ்வான வழிமுறை, Reporting API-ன் ஒரு பகுதி.
எடுத்துக்காட்டு:
report-uri /csp-report-endpoint;
report-to /csp-report-endpoint;
இந்த அறிக்கைகளைப் பெறவும் செயலாக்கவும் உங்களுக்கு ஒரு சர்வர்-பக்க முனைப்புள்ளி (எ.கா., /csp-report-endpoint
) தேவைப்படும்.
CSP-ஐ செயல்படுத்துதல்: ஒரு படி படியான அணுகுமுறை
CSP-ஐ திறம்பட செயல்படுத்துவதற்கு ஒரு முறையான அணுகுமுறை தேவைப்படுகிறது, குறிப்பாக இன்லைன் ஸ்கிரிப்டுகள் அல்லது டைனமிக் குறியீடு மதிப்பீட்டை பெரிதும் நம்பியிருக்கும் ஏற்கனவே உள்ள பயன்பாடுகளைக் கையாளும் போது.
படி 1: அறிக்கை-மட்டும் கொள்கையுடன் தொடங்கவும்
CSP-ஐ அமல்படுத்துவதற்கும், உங்கள் பயன்பாட்டை உடைப்பதற்கும் முன், CSP-ஐ Content-Security-Policy-Report-Only
பயன்முறையில் பயன்படுத்துவதன் மூலம் தொடங்கவும். இந்த பயன்முறை எந்த வளங்களையும் உண்மையில் தடுக்காமல் மீறல்களைக் கண்காணிக்க உங்களை அனுமதிக்கிறது. உங்கள் பயன்பாடு தற்போது என்ன செய்கிறது மற்றும் எதை வெள்ளைப் பட்டியலில் சேர்க்க வேண்டும் என்பதைப் புரிந்துகொள்வதற்கு இது விலைமதிப்பற்றது.
எடுத்துக்காட்டு அறிக்கை-மட்டும் தலைப்பு:
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; report-uri /csp-report-endpoint;
நீங்கள் அறிக்கைகளைப் பெறும்போது, எந்த ஸ்கிரிப்டுகள் தடுக்கப்படுகின்றன என்பதைக் காண்பீர்கள். பின்னர் முறையான வளங்களை அனுமதிக்க உங்கள் கொள்கையை படிப்படியாக சரிசெய்யலாம்.
படி 2: CSP மீறல் அறிக்கைகளை பகுப்பாய்வு செய்யவும்
உங்கள் அறிக்கை முனைப்புள்ளியை அமைத்து, உள்வரும் JSON அறிக்கைகளை பகுப்பாய்வு செய்யுங்கள். தடுக்கப்பட்ட வளங்களில் உள்ள வடிவங்களைத் தேடுங்கள். பொதுவான மீறல்களில் பின்வருவன அடங்கும்:
- இன்லைன் ஜாவாஸ்கிரிப்ட் (எ.கா.,
onclick
பண்புக்கூறுகள்,<script>alert('xss')</script>
). - வெள்ளைப் பட்டியலில் இல்லாத மூன்றாம் தரப்பு CDN-லிருந்து ஏற்றப்பட்ட ஜாவாஸ்கிரிப்ட்.
- டைனமிக்காக உருவாக்கப்பட்ட ஸ்கிரிப்ட் உள்ளடக்கம்.
படி 3: படிப்படியாக கொள்கையை அமல்படுத்தவும்
உங்கள் பயன்பாட்டின் வள ஏற்றுதல் வடிவங்களைப் பற்றி உங்களுக்கு நல்ல புரிதல் கிடைத்ததும், அறிக்கைகளின் அடிப்படையில் உங்கள் கொள்கையை சரிசெய்ததும், நீங்கள் Content-Security-Policy-Report-Only
-லிருந்து உண்மையான Content-Security-Policy
தலைப்புக்கு மாறலாம்.
எடுத்துக்காட்டு அமல்படுத்தும் தலைப்பு:
Content-Security-Policy: default-src 'self'; script-src 'self'; report-uri /csp-report-endpoint;
படி 4: பாதுகாப்பற்ற நடைமுறைகளை அகற்ற மறுசீரமைக்கவும்
இறுதி இலக்கு 'unsafe-inline'
, 'unsafe-eval'
, மற்றும் உங்கள் CSP-லிருந்து அதிகப்படியான வைல்டு கார்டுகளை அகற்றுவதாகும். இதற்கு உங்கள் ஜாவாஸ்கிரிப்ட் குறியீட்டை மறுசீரமைக்க வேண்டும்:
- இன்லைன் ஸ்கிரிப்டுகளை அகற்று: அனைத்து இன்லைன் ஜாவாஸ்கிரிப்ட் நிகழ்வு கையாளிகளையும் (
onclick
,onerror
போன்றவை) தனி ஜாவாஸ்கிரிப்ட் கோப்புகளுக்கு நகர்த்தி,addEventListener
-ஐப் பயன்படுத்தி அவற்றை இணைக்கவும். - இன்லைன் நிகழ்வு கையாளிகளை அகற்று:
- டைனமிக் ஸ்கிரிப்ட் ஏற்றுதலைக் கையாளுதல்: உங்கள் பயன்பாடு டைனமிக்காக ஸ்கிரிப்டுகளை ஏற்றினால், இந்த ஸ்கிரிப்டுகள் அங்கீகரிக்கப்பட்ட மூலங்களிலிருந்து பெறப்படுவதை உறுதிசெய்யவும்.
eval()
மற்றும்new Function()
-ஐ மாற்றுதல்: இவை சக்திவாய்ந்தவை ஆனால் ஆபத்தானவை. பயன்படுத்தப்பட்டால், பாதுகாப்பான மாற்றுகளைக் கருத்தில் கொள்ளுங்கள் அல்லது தர்க்கத்தை மறுசீரமைக்கவும். பெரும்பாலும், JSON-ஐ பாகுபடுத்தும் நோக்கம் இருந்தால்JSON.parse()
உடன் JSON பாகுபடுத்துதல் ஒரு பாதுகாப்பான மாற்றாகும்.- இன்லைன் ஸ்கிரிப்டுகளுக்கு நான்ஸ்கள் அல்லது ஹாஷ்களைப் பயன்படுத்தவும் (முற்றிலும் அவசியமானால்): இன்லைன் ஸ்கிரிப்டுகளை மறுசீரமைப்பது சவாலாக இருந்தால், CSP பாதுகாப்பை அதிகம் சமரசம் செய்யாமல் குறிப்பிட்ட இன்லைன் ஸ்கிரிப்டுகளை அனுமதிக்க வழிமுறைகளை வழங்குகிறது.
<button onclick="myFunction()">Click me</button>
// Refactored:
// In your JS file:
document.querySelector('button').addEventListener('click', myFunction);
function myFunction() { /* ... */ }
இன்லைன் ஸ்கிரிப்டுகளுக்கான நான்ஸ்கள்
ஒரு நான்ஸ் (ஒரு முறை பயன்படுத்தப்படும் எண்) என்பது ஒவ்வொரு கோரிக்கைக்கும் தனித்துவமான, தோராயமாக உருவாக்கப்பட்ட ஒரு சரம். உங்கள் CSP தலைப்பிலும், நீங்கள் அனுமதிக்க விரும்பும் இன்லைன் <script>
குறிச்சொற்களிலும் ஒரு நான்ஸை உட்பொதிக்கலாம்.
எடுத்துக்காட்டு:
சர்வர்-பக்கம் (நான்ஸ் உருவாக்குதல்):
// In your server-side code (e.g., Node.js with Express):
const crypto = require('crypto');
const nonce = crypto.randomBytes(16).toString('hex');
res.setHeader(
'Content-Security-Policy',
`script-src 'self' 'nonce-${nonce}'; object-src 'none'; ...`
);
// In your HTML template:
<script nonce="${nonce}">
// Your inline JavaScript here
</script>
உலாவி பொருந்தும் நான்ஸ் பண்புக்கூறு கொண்ட இன்லைன் ஸ்கிரிப்டுகளை மட்டுமே இயக்கும்.
இன்லைன் ஸ்கிரிப்டுகளுக்கான ஹாஷ்கள்
நீங்கள் குறிப்பிட்ட இன்லைன் ஸ்கிரிப்ட் தொகுதிகளின் ஹாஷ்களையும் குறிப்பிடலாம். உலாவி இன்லைன் ஸ்கிரிப்டுகளின் ஹாஷைக் கணக்கிட்டு, அதை CSP-ல் உள்ள ஹாஷ்களுடன் ஒப்பிடும். இது கோரிக்கைக்கு மாறாத நிலையான இன்லைன் ஸ்கிரிப்டுகளுக்கு பயனுள்ளதாக இருக்கும்.
எடுத்துக்காட்டு:
உங்கள் இன்லைன் ஸ்கிரிப்ட் alert('Hello CSP!');
என்றால், அதன் SHA256 ஹாஷ் J9cQkQn3+tGj9Gv2aL+z0+tJ+K/G2gL7xT0f2j8q0=
ஆக இருக்கும் (இதை நீங்கள் ஒரு கருவியைப் பயன்படுத்தி கணக்கிட வேண்டும்).
CSP தலைப்பு:
Content-Security-Policy: script-src 'self' 'sha256-J9cQkQn3+tGj9Gv2aL+z0+tJ+K/G2gL7xT0f2j8q0=';
இது நான்ஸ்களை விட குறைவான நெகிழ்வானது ஆனால் குறிப்பிட்ட, மாறாத இன்லைன் குறியீடு துணுக்குகளுக்கு பொருத்தமானதாக இருக்கலாம்.
படி 5: தொடர்ச்சியான கண்காணிப்பு மற்றும் செம்மைப்படுத்துதல்
பாதுகாப்பு ஒரு தொடர்ச்சியான செயல்முறை. உங்கள் CSP மீறல் அறிக்கைகளை தவறாமல் மதிப்பாய்வு செய்யுங்கள். உங்கள் பயன்பாடு உருவாகும்போது, புதிய மூன்றாம் தரப்பு ஸ்கிரிப்டுகள் அறிமுகப்படுத்தப்படலாம், அல்லது ஏற்கனவே உள்ளவை புதுப்பிக்கப்படலாம், உங்கள் CSP-ல் மாற்றங்கள் தேவைப்படலாம். விழிப்புடன் இருங்கள் மற்றும் தேவைக்கேற்ப உங்கள் கொள்கையைப் புதுப்பிக்கவும்.
பொதுவான ஜாவாஸ்கிரிப்ட் பாதுகாப்பு ஆபத்துகளும் CSP தீர்வுகளும்
சில பொதுவான ஜாவாஸ்கிரிப்ட் பாதுகாப்பு சிக்கல்களையும் CSP அவற்றை எவ்வாறு தணிக்க உதவுகிறது என்பதையும் ஆராய்வோம்:
1. இன்லைன் ஸ்கிரிப்டுகள் வழியாக குறுக்கு-தள ஸ்கிரிப்டிங் (XSS)
சிக்கல்: ஒரு தாக்குபவர் தீங்கிழைக்கும் ஜாவாஸ்கிரிப்டை நேரடியாக உங்கள் பக்கத்தின் HTML-ல் உட்செலுத்துகிறார், பெரும்பாலும் சரியாக சுத்திகரிக்கப்படாத பயனர் உள்ளீடு மூலம். இது ஒரு ஸ்கிரிப்ட் குறிச்சொல்லாகவோ அல்லது ஒரு இன்லைன் நிகழ்வு கையாளியாகவோ இருக்கலாம்.
CSP தீர்வு:
- இன்லைன் ஸ்கிரிப்டுகளை முடக்கு:
script-src
-லிருந்து'unsafe-inline'
-ஐ அகற்றவும். - நான்ஸ்கள் அல்லது ஹாஷ்களைப் பயன்படுத்தவும்: இன்லைன் ஸ்கிரிப்டுகள் தவிர்க்க முடியாததாக இருந்தால், குறிப்பிட்ட, நோக்கம் கொண்ட ஸ்கிரிப்டுகளை மட்டுமே அனுமதிக்க நான்ஸ்கள் அல்லது ஹாஷ்களைப் பயன்படுத்தவும்.
- பயனர் உள்ளீட்டை சுத்திகரிக்கவும்: இது CSP-ஐ பூர்த்தி செய்யும் ஒரு அடிப்படை பாதுகாப்பு நடைமுறை. பயனர்களிடமிருந்து உருவாகும் எந்தவொரு தரவையும் உங்கள் பக்கத்தில் காண்பிக்கும் முன் எப்போதும் சுத்திகரித்து சரிபார்க்கவும்.
2. மூன்றாம் தரப்பு ஸ்கிரிப்டுகள் வழியாக XSS
சிக்கல்: ஒரு முறையான மூன்றாம் தரப்பு ஸ்கிரிப்ட் (எ.கா., ஒரு CDN, ஒரு பகுப்பாய்வு வழங்குநர், அல்லது ஒரு விளம்பர நெட்வொர்க்-லிருந்து) சமரசம் செய்யப்படுகிறது அல்லது ஒரு பாதிப்பைக் கொண்டுள்ளது, இது தாக்குபவர்களை அதன் மூலம் தீங்கிழைக்கும் குறியீட்டை இயக்க அனுமதிக்கிறது.
CSP தீர்வு:
- மூன்றாம் தரப்பு ஸ்கிரிப்டுகளுடன் தேர்ந்தெடுப்பாக இருங்கள்: நம்பகமான மூலங்களிலிருந்து மட்டுமே ஸ்கிரிப்டுகளைச் சேர்க்கவும்.
- மூலங்களை துல்லியமாக சுட்டிக்காட்டவும்:
*.example.com
போன்ற வைல்டு கார்டுகளைப் பயன்படுத்துவதற்குப் பதிலாக, சரியான டொமைன்களை வெளிப்படையாக பட்டியலிடுங்கள் (எ.கா.,scripts.example.com
). - துணைவள ஒருமைப்பாட்டைப் (SRI) பயன்படுத்தவும்: நேரடியாக CSP-ன் பகுதியாக இல்லாவிட்டாலும், SRI ஒரு கூடுதல் பாதுகாப்பு அடுக்கை வழங்குகிறது. இது உங்கள் ஸ்கிரிப்ட் கோப்புகளுக்கு கிரிப்டோகிராஃபிக் ஹாஷ்களைக் குறிப்பிட உங்களை அனுமதிக்கிறது. ஸ்கிரிப்ட்டின் ஒருமைப்பாடு குறிப்பிட்ட ஹாஷுடன் பொருந்தினால் மட்டுமே உலாவி அதை இயக்கும். இது ஒரு சமரசம் செய்யப்பட்ட CDN உங்கள் ஸ்கிரிப்ட்டின் தீங்கிழைக்கும் பதிப்பை வழங்குவதைத் தடுக்கிறது.
CSP மற்றும் SRI-ஐ இணைக்கும் எடுத்துக்காட்டு:
HTML:
<script src="https://trusted.cdn.com/library.js" integrity="sha256-abcdef123456..." crossorigin="anonymous"></script>
CSP தலைப்பு:
Content-Security-Policy: script-src 'self' https://trusted.cdn.com;
...
3. தரவு உட்செலுத்துதல் மற்றும் DOM கையாளுதல்
சிக்கல்: தாக்குபவர்கள் DOM-ஐ கையாளும் அல்லது பயனர்களை செயல்களைச் செய்ய ஏமாற்றும் தரவை உட்செலுத்த முயற்சி செய்யலாம். இது சில நேரங்களில் டைனமிக்காக உருவாக்கப்பட்ட ஜாவாஸ்கிரிப்டை உள்ளடக்கியிருக்கலாம்.
CSP தீர்வு:
'unsafe-eval'
-ஐ முடக்கு: இந்த வழிமுறைeval()
, சரம் வாதங்களுடன்setTimeout()
, அல்லதுnew Function()
போன்ற செயல்பாடுகளைப் பயன்படுத்தி ஜாவாஸ்கிரிப்ட் குறியீட்டை மதிப்பிடுவதைத் தடுக்கிறது. இவை பெரும்பாலும் குறியீட்டை டைனமிக்காக இயக்கப் பயன்படுகின்றன, இது ஒரு பாதுகாப்பு அபாயமாக இருக்கலாம்.- கடுமையான `script-src` வழிமுறைகள்: அனுமதிக்கப்பட்ட மூலங்களை வெளிப்படையாகக் குறிப்பிடுவதன் மூலம், எதிர்பாராத ஸ்கிரிப்ட் செயல்பாட்டின் வாய்ப்பைக் குறைக்கிறீர்கள்.
4. கிளிக்ஜாக்கிங்
சிக்கல்: தாக்குபவர்கள் பயனர்கள் தாங்கள் உணருவதை விட வேறு ஒன்றைக் கிளிக் செய்ய ஏமாற்றுகிறார்கள், பொதுவாக முறையான கூறுகளை தீங்கிழைக்கும் கூறுகளுக்குப் பின்னால் மறைப்பதன் மூலம். இது பெரும்பாலும் உங்கள் தளத்தை ஒரு தீங்கிழைக்கும் தளத்தில் ஒரு iframe-ல் உட்பொதிப்பதன் மூலம் அடையப்படுகிறது.
CSP தீர்வு:
frame-ancestors
வழிமுறை: இந்த வழிமுறை உங்கள் பக்கத்தை உட்பொதிக்க எந்த மூலங்கள் அனுமதிக்கப்படுகின்றன என்பதைக் கட்டுப்படுத்துகிறது.
எடுத்துக்காட்டு:
Content-Security-Policy: frame-ancestors 'self';
இந்தக் கொள்கை உங்கள் பக்கத்தை அதன் சொந்த டொமைனைத் தவிர வேறு எந்த டொமைனிலும் ஒரு iframe-ல் உட்பொதிப்பதைத் தடுக்கும். frame-ancestors 'none';
என அமைப்பது அதை எங்கும் உட்பொதிப்பதைத் தடுக்கும்.
உலகளவில் பொருந்தக்கூடிய CSP உத்திகள்
ஒரு உலகளாவிய பார்வையாளர்களுக்காக CSP-ஐ செயல்படுத்தும்போது, பின்வருவனவற்றைக் கவனியுங்கள்:
- உள்ளடக்க விநியோக நெட்வொர்க்குகள் (CDNs): பல பயன்பாடுகள் நிலையான சொத்துக்களை வழங்க உலகளாவிய CDN-களைப் பயன்படுத்துகின்றன. இந்த CDN-களின் டொமைன்கள் உங்கள்
script-src
மற்றும் பிற தொடர்புடைய வழிமுறைகளில் சரியாக வெள்ளைப் பட்டியலில் சேர்க்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும். வெவ்வேறு பிராந்தியங்கள் வெவ்வேறு CDN விளிம்பு சேவையகங்களைப் பயன்படுத்தக்கூடும் என்பதை அறிந்து கொள்ளுங்கள், ஆனால் CSP-க்கு டொமைன் தான் முக்கியம். - சர்வதேசமயமாக்கப்பட்ட டொமைன் பெயர்கள் (IDNs): உங்கள் பயன்பாடு IDN-களைப் பயன்படுத்தினால், அவை உங்கள் CSP-ல் சரியாக குறிப்பிடப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்.
- மூன்றாம் தரப்பு சேவைகள்: பயன்பாடுகள் பெரும்பாலும் பல்வேறு சர்வதேச மூன்றாம் தரப்பு சேவைகளுடன் (எ.கா., கட்டண நுழைவாயில்கள், சமூக ஊடக விட்ஜெட்டுகள், பகுப்பாய்வு) ஒருங்கிணைக்கப்படுகின்றன. இந்த சேவைகள் ஒவ்வொன்றும் குறிப்பிட்ட டொமைன்களை வெள்ளைப் பட்டியலில் சேர்க்க வேண்டியிருக்கலாம். அனைத்து மூன்றாம் தரப்பு ஸ்கிரிப்ட் மூலங்களையும் உன்னிப்பாகக் கண்காணிக்கவும்.
- இணக்கம் மற்றும் விதிமுறைகள்: வெவ்வேறு பிராந்தியங்களில் வெவ்வேறு தரவு தனியுரிமை விதிமுறைகள் உள்ளன (எ.கா., ஐரோப்பாவில் GDPR, கலிபோர்னியாவில் CCPA). CSP நேரடியாக தரவு தனியுரிமை இணக்கத்தை நிவர்த்தி செய்யாவிட்டாலும், இது தரவு வெளிப்படுவதைத் தடுப்பதன் மூலம் இணக்கத்தை ஆதரிக்கும் ஒரு முக்கியமான பாதுகாப்பு நடவடிக்கையாகும்.
- பிராந்தியங்கள் முழுவதும் சோதனை: உங்கள் பயன்பாடு வெவ்வேறு பிராந்தியங்களில் வெவ்வேறு வரிசைப்படுத்தல்கள் அல்லது உள்ளமைவுகளைக் கொண்டிருந்தால், ஒவ்வொன்றிலும் உங்கள் CSP செயலாக்கத்தைச் சோதிக்கவும்.
- மொழி மற்றும் உள்ளூர்மயமாக்கல்: CSP வழிமுறைகள் மற்றும் அவற்றின் மதிப்புகள் தரப்படுத்தப்பட்டுள்ளன. பயனரின் மொழி அல்லது பிராந்தியத்தால் கொள்கை பாதிக்கப்படுவதில்லை, ஆனால் அது குறிப்பிடும் வளங்கள் புவியியல் ரீதியாக விநியோகிக்கப்பட்ட சேவையகங்களில் ஹோஸ்ட் செய்யப்படலாம்.
CSP-ஐ செயல்படுத்துவதற்கான சிறந்த நடைமுறைகள்
ஒரு வலுவான மற்றும் பராமரிக்கக்கூடிய CSP செயலாக்கத்தை உறுதிப்படுத்த சில சிறந்த நடைமுறைகள் இங்கே:
- கடுமையாகத் தொடங்கி படிப்படியாக அகலப்படுத்தவும்: முடிந்தவரை மிகவும் கட்டுப்படுத்தப்பட்ட கொள்கையுடன் தொடங்கவும் (எ.கா.,
default-src 'none';
) பின்னர் உங்கள் பயன்பாட்டின் தேவைகளின் அடிப்படையில் அனுமதிக்கப்பட்ட மூலங்களை படிப்படியாகச் சேர்க்கவும்,Content-Security-Policy-Report-Only
பயன்முறையை விரிவாகப் பயன்படுத்தவும். 'unsafe-inline'
மற்றும்'unsafe-eval'
-ஐத் தவிர்க்கவும்: இவை உங்கள் பாதுகாப்பு நிலையை கணிசமாக பலவீனப்படுத்துவதாக அறியப்படுகிறது. அவற்றை அகற்ற உங்கள் குறியீட்டை மறுசீரமைப்பதற்கு முன்னுரிமை அளியுங்கள்.- குறிப்பிட்ட மூலங்களைப் பயன்படுத்தவும்: முடிந்தவரை வைல்டு கார்டுகளை (
*.example.com
) விட குறிப்பிட்ட டொமைன் பெயர்களை விரும்புங்கள். வைல்டு கார்டுகள் தற்செயலாக உத்தேசித்ததை விட அதிகமான மூலங்களை அனுமதிக்கக்கூடும். - அறிக்கையிடலைச் செயல்படுத்தவும்: எப்போதும் ஒரு
report-uri
அல்லதுreport-to
வழிமுறையைச் சேர்க்கவும். மீறல்களைக் கண்காணிப்பதற்கும் சாத்தியமான தாக்குதல்கள் அல்லது தவறான உள்ளமைவுகளை அடையாளம் காண்பதற்கும் இது அவசியம். - பிற பாதுகாப்பு நடவடிக்கைகளுடன் இணைக்கவும்: CSP ஒரு பாதுகாப்பு அடுக்கு மட்டுமே. உள்ளீட்டு சுத்திகரிப்பு, வெளியீட்டு குறியாக்கம், பாதுகாப்பான குறியீட்டு நடைமுறைகள் மற்றும் வழக்கமான பாதுகாப்பு தணிக்கைகள் போன்ற பிற பாதுகாப்பு நடைமுறைகளுடன் இணைந்தால் இது சிறப்பாக செயல்படுகிறது.
- HTTP vs. மெட்டா குறிச்சொற்கள்: CSP ஒரு மெட்டா குறிச்சொல் (
<meta http-equiv="Content-Security-Policy" content="...">
) வழியாக அமைக்கப்படலாம் என்றாலும், பொதுவாக அதை HTTP தலைப்புகள் வழியாக அமைக்க பரிந்துரைக்கப்படுகிறது. HTTP தலைப்புகள் சிறந்த பாதுகாப்பை வழங்குகின்றன, குறிப்பாக மெட்டா குறிச்சொல்லை மாற்றக்கூடிய சில உட்செலுத்துதல் தாக்குதல்களுக்கு எதிராக. மேலும், பக்க உள்ளடக்கம் காண்பிக்கப்படுவதற்கு முன்பு HTTP தலைப்புகள் செயலாக்கப்படுகின்றன, இது ஆரம்ப பாதுகாப்பை வழங்குகிறது. - CSP நிலை 3-ஐக் கருத்தில் கொள்ளுங்கள்: CSP-ன் புதிய பதிப்புகள் (நிலை 3 போன்றவை) மேலும் மேம்பட்ட அம்சங்களையும் நெகிழ்வுத்தன்மையையும் வழங்குகின்றன. சமீபத்திய விவரக்குறிப்புகளுடன் புதுப்பித்த நிலையில் இருங்கள்.
- முழுமையாகச் சோதிக்கவும்: எந்தவொரு CSP மாற்றங்களையும் உற்பத்திக்கு வரிசைப்படுத்துவதற்கு முன்பு, அவற்றை ஸ்டேஜிங் சூழல்களிலும் வெவ்வேறு உலாவிகள் மற்றும் சாதனங்களிலும் விரிவாகச் சோதிக்கவும்.
கருவிகள் மற்றும் வளங்கள்
உங்கள் CSP-ஐ உருவாக்க, சோதிக்க மற்றும் நிர்வகிக்க பல கருவிகள் உங்களுக்கு உதவக்கூடும்:
- கூகிளின் CSP மதிப்பீட்டாளர்: உங்கள் வலைத்தளத்தின் CSP-ஐ பகுப்பாய்வு செய்து பரிந்துரைகளை வழங்கும் ஒரு வலை அடிப்படையிலான கருவி. (
https://csp-evaluator.withgoogle.com/
) - CSP வழிமுறைகள் குறிப்பு: CSP வழிமுறைகள் மற்றும் அவற்றின் விளக்கங்களின் விரிவான பட்டியல். (
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/Using_directives
) - ஆன்லைன் CSP ஜெனரேட்டர்கள்: உங்கள் பயன்பாட்டின் தேவைகளின் அடிப்படையில் ஒரு தொடக்க CSP-ஐ உருவாக்க உதவும் கருவிகள்.
முடிவுரை
பாதுகாப்பான பயன்பாடுகளை உருவாக்குவதில் உறுதியாக உள்ள எந்தவொரு வலை டெவலப்பருக்கும் உள்ளடக்கப் பாதுகாப்புக் கொள்கை ஒரு தவிர்க்க முடியாத கருவியாகும். உங்கள் வலைச் செயலி எந்த மூலங்களிலிருந்து வளங்களை, குறிப்பாக ஜாவாஸ்கிரிப்டை, ஏற்றலாம் மற்றும் இயக்கலாம் என்பதைக் உன்னிப்பாகக் கட்டுப்படுத்துவதன் மூலம், நீங்கள் XSS போன்ற பேரழிவுத் தாக்குதல்களின் அபாயத்தைக் கணிசமாகக் குறைக்கலாம். CSP-ஐ செயல்படுத்துவது முதலில், குறிப்பாக சிக்கலான பயன்பாடுகளுக்கு, கடினமாகத் தோன்றினாலும், அறிக்கையிடலுடன் தொடங்கி படிப்படியாகக் கொள்கையை இறுக்குவதற்கான ஒரு கட்டமைக்கப்பட்ட அணுகுமுறை, மிகவும் பாதுகாப்பான மற்றும் நெகிழ்வான வலை இருப்பிற்கு வழிவகுக்கும்.
பாதுகாப்பு ஒரு வளர்ந்து வரும் துறை என்பதை நினைவில் கொள்ளுங்கள். உள்ளடக்கப் பாதுகாப்புக் கொள்கை போன்ற கொள்கைகளைப் புரிந்துகொண்டு தீவிரமாகப் பயன்படுத்துவதன் மூலம், உலகளாவிய டிஜிட்டல் சுற்றுச்சூழல் அமைப்பில் உங்கள் பயனர்களையும் உங்கள் தரவையும் பாதுகாப்பதில் நீங்கள் ஒரு செயலூக்கமான நிலைப்பாட்டை எடுக்கிறீர்கள். CSP-ஐத் தழுவுங்கள், உங்கள் குறியீட்டை மறுசீரமைக்கவும், அனைவருக்கும் பாதுகாப்பான வலையை உருவாக்க விழிப்புடன் இருங்கள்.