క్రాస్-సైట్ స్క్రిప్టింగ్ (XSS) దాడులను నివారించడం మరియు పటిష్టమైన ఫ్రంటెండ్ సెక్యూరిటీ కోసం కంటెంట్ సెక్యూరిటీ పాలసీ (CSP)ని అమలు చేయడానికి ఒక సమగ్ర మార్గదర్శి.
ఫ్రంటెండ్ సెక్యూరిటీ: XSS నివారణ మరియు కంటెంట్ సెక్యూరిటీ పాలసీ (CSP)
నేటి వెబ్ డెవలప్మెంట్ ప్రపంచంలో, ఫ్రంటెండ్ సెక్యూరిటీ చాలా ముఖ్యమైనది. వెబ్ అప్లికేషన్లు మరింత సంక్లిష్టంగా మరియు ఇంటరాక్టివ్గా మారుతున్న కొద్దీ, అవి వివిధ దాడులకు, ముఖ్యంగా క్రాస్-సైట్ స్క్రిప్టింగ్ (XSS)కు గురయ్యే అవకాశం కూడా పెరుగుతుంది. ఈ వ్యాసం XSS బలహీనతలను అర్థం చేసుకోవడానికి మరియు తగ్గించడానికి, అలాగే ఒక పటిష్టమైన రక్షణ యంత్రాంగంగా కంటెంట్ సెక్యూరిటీ పాలసీ (CSP)ని అమలు చేయడానికి ఒక సమగ్ర మార్గదర్శిని అందిస్తుంది.
క్రాస్-సైట్ స్క్రిప్టింగ్ (XSS)ను అర్థం చేసుకోవడం
XSS అంటే ఏమిటి?
క్రాస్-సైట్ స్క్రిప్టింగ్ (XSS) అనేది ఒక రకమైన ఇంజెక్షన్ దాడి, దీనిలో హానికరమైన స్క్రిప్ట్లు నమ్మకమైన మరియు సురక్షితమైన వెబ్సైట్లలోకి చొప్పించబడతాయి. XSS దాడులు ఒక దాడి చేసే వ్యక్తి వెబ్ అప్లికేషన్ను ఉపయోగించి, సాధారణంగా బ్రౌజర్ సైడ్ స్క్రిప్ట్ రూపంలో, వేరొక తుది వినియోగదారునికి హానికరమైన కోడ్ను పంపినప్పుడు జరుగుతాయి. ఈ దాడులు విజయవంతం కావడానికి అనుమతించే లోపాలు చాలా విస్తృతంగా ఉన్నాయి మరియు వెబ్ అప్లికేషన్ ఒక వినియోగదారు నుండి ఇన్పుట్ను ధృవీకరించకుండా లేదా ఎన్కోడ్ చేయకుండా దాని అవుట్పుట్లో ఉపయోగించినప్పుడు ఎక్కడైనా సంభవించవచ్చు.
వినియోగదారులు వ్యాఖ్యలను పోస్ట్ చేయగల ఒక ప్రసిద్ధ ఆన్లైన్ ఫోరమ్ను ఊహించుకోండి. ఫోరమ్ వినియోగదారు ఇన్పుట్ను సరిగ్గా శుభ్రపరచకపోతే, దాడి చేసే వ్యక్తి ఒక వ్యాఖ్యలో హానికరమైన జావాస్క్రిప్ట్ స్నిప్పెట్ను ఇంజెక్ట్ చేయవచ్చు. ఇతర వినియోగదారులు ఆ వ్యాఖ్యను చూసినప్పుడు, వారి బ్రౌజర్లలో హానికరమైన స్క్రిప్ట్ అమలు అవుతుంది, ఇది వారి కుక్కీలను దొంగిలించడం, వారిని ఫిషింగ్ సైట్లకు దారి మళ్లించడం, లేదా వెబ్సైట్ను పాడుచేయడం వంటివి చేయవచ్చు.
XSS దాడుల రకాలు
- రిఫ్లెక్టెడ్ XSS: హానికరమైన స్క్రిప్ట్ ఒకే అభ్యర్థనలో ఇంజెక్ట్ చేయబడుతుంది. సర్వర్ ఇంజెక్ట్ చేయబడిన డేటాను HTTP అభ్యర్థన నుండి చదివి, దాన్ని వినియోగదారునికి తిరిగి ప్రతిబింబిస్తుంది, వారి బ్రౌజర్లో స్క్రిప్ట్ను అమలు చేస్తుంది. ఇది తరచుగా హానికరమైన లింక్లను కలిగి ఉన్న ఫిషింగ్ ఈమెయిల్ల ద్వారా సాధించబడుతుంది.
- స్టోర్డ్ XSS: హానికరమైన స్క్రిప్ట్ లక్ష్య సర్వర్లో (ఉదా., డేటాబేస్, ఫోరమ్ పోస్ట్, లేదా వ్యాఖ్య విభాగంలో) నిల్వ చేయబడుతుంది. ఇతర వినియోగదారులు నిల్వ చేయబడిన డేటాను యాక్సెస్ చేసినప్పుడు, వారి బ్రౌజర్లలో స్క్రిప్ట్ అమలు చేయబడుతుంది. ఈ రకమైన XSS చాలా ప్రమాదకరమైనది ఎందుకంటే ఇది పెద్ద సంఖ్యలో వినియోగదారులను ప్రభావితం చేస్తుంది.
- DOM-ఆధారిత XSS: బలహీనత క్లయింట్-సైడ్ జావాస్క్రిప్ట్ కోడ్లోనే ఉంటుంది. దాడి బాధితుడి బ్రౌజర్లోని DOM (డాక్యుమెంట్ ఆబ్జెక్ట్ మోడల్)ను తారుమారు చేస్తుంది, దీనివల్ల హానికరమైన స్క్రిప్ట్ అమలు అవుతుంది. ఇది తరచుగా URLలను లేదా ఇతర క్లయింట్-సైడ్ డేటాను మార్చడం ద్వారా జరుగుతుంది.
XSS యొక్క ప్రభావం
ఒక విజయవంతమైన XSS దాడి యొక్క పరిణామాలు తీవ్రంగా ఉండవచ్చు:
- కుక్కీల దొంగతనం: దాడి చేసేవారు వినియోగదారు కుక్కీలను దొంగిలించి, వారి ఖాతాలకు మరియు సున్నితమైన సమాచారానికి యాక్సెస్ పొందగలరు.
- ఖాతా హైజాకింగ్: దొంగిలించిన కుక్కీలతో, దాడి చేసేవారు వినియోగదారులుగా నటించి వారి తరపున చర్యలు చేయగలరు.
- వెబ్సైట్ వికృతీకరణ: దాడి చేసేవారు వెబ్సైట్ రూపాన్ని మార్చి, తప్పుడు సమాచారాన్ని వ్యాప్తి చేయవచ్చు లేదా బ్రాండ్ కీర్తిని దెబ్బతీయవచ్చు.
- ఫిషింగ్ సైట్లకు దారి మళ్లింపు: వినియోగదారులను వారి లాగిన్ ఆధారాలను దొంగిలించే లేదా మాల్వేర్ను ఇన్స్టాల్ చేసే హానికరమైన వెబ్సైట్లకు దారి మళ్లించవచ్చు.
- డేటా ఎక్స్ఫిల్ట్రేషన్: పేజీలో ప్రదర్శించబడే సున్నితమైన డేటాను దొంగిలించి, దాడి చేసేవారి సర్వర్కు పంపవచ్చు.
XSS నివారణ పద్ధతులు
XSS దాడులను నివారించడానికి బహుళ-స్థాయి విధానం అవసరం, ఇది ఇన్పుట్ ధృవీకరణ మరియు అవుట్పుట్ ఎన్కోడింగ్ రెండింటిపై దృష్టి పెడుతుంది.
ఇన్పుట్ ధృవీకరణ
ఇన్పుట్ ధృవీకరణ అనేది వినియోగదారు ఇన్పుట్ ఆశించిన ఫార్మాట్ మరియు డేటా రకానికి అనుగుణంగా ఉందని ధృవీకరించే ప్రక్రియ. ఇది XSSకు వ్యతిరేకంగా పూర్తిస్థాయి రక్షణ కానప్పటికీ, ఇది దాడి చేసే అవకాశాన్ని తగ్గించడంలో సహాయపడుతుంది.
- వైట్లిస్ట్ ధృవీకరణ: అనుమతించబడిన అక్షరాలు మరియు నమూనాల యొక్క కఠినమైన సమితిని నిర్వచించండి. వైట్లిస్ట్కు సరిపోలని ఏదైనా ఇన్పుట్ను తిరస్కరించండి. ఉదాహరణకు, మీరు ఒక వినియోగదారు పేరును నమోదు చేయాలని ఆశించినట్లయితే, కేవలం అక్షరాలు, ఖాళీలు మరియు బహుశా హైఫన్లను మాత్రమే అనుమతించండి.
- బ్లాక్లిస్ట్ ధృవీకరణ: తెలిసిన హానికరమైన అక్షరాలు లేదా నమూనాలను గుర్తించి, నిరోధించండి. అయితే, బ్లాక్లిస్ట్లు తరచుగా అసంపూర్ణంగా ఉంటాయి మరియు తెలివైన దాడి చేసేవారు వాటిని దాటవేయగలరు. బ్లాక్లిస్ట్ ధృవీకరణ కంటే వైట్లిస్ట్ ధృవీకరణ సాధారణంగా ప్రాధాన్యత ఇవ్వబడుతుంది.
- డేటా రకం ధృవీకరణ: ఇన్పుట్ ఆశించిన డేటా రకానికి (ఉదా., పూర్ణాంకం, ఇమెయిల్ చిరునామా, URL) సరిపోలుతుందని నిర్ధారించుకోండి.
- పొడవు పరిమితులు: బఫర్ ఓవర్ఫ్లో బలహీనతలను నివారించడానికి ఇన్పుట్ ఫీల్డ్లపై గరిష్ట పొడవు పరిమితులను విధించండి.
ఉదాహరణ (PHP):
<?php
$username = $_POST['username'];
// వైట్లిస్ట్ ధృవీకరణ: కేవలం ఆల్ఫాన్యూమరిక్ అక్షరాలు మరియు అండర్స్కోర్లను మాత్రమే అనుమతించండి
if (preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
// చెల్లుబాటు అయ్యే యూజర్నేమ్
echo "చెల్లుబాటు అయ్యే యూజర్నేమ్: " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8');
} else {
// చెల్లని యూజర్నేమ్
echo "చెల్లని యూజర్నేమ్. కేవలం ఆల్ఫాన్యూమరిక్ అక్షరాలు మరియు అండర్స్కోర్లు మాత్రమే అనుమతించబడతాయి.";
}
?>
అవుట్పుట్ ఎన్కోడింగ్ (ఎస్కేపింగ్)
అవుట్పుట్ ఎన్కోడింగ్, దీనిని ఎస్కేపింగ్ అని కూడా అంటారు, ఇది ప్రత్యేక అక్షరాలను వాటి HTML ఎంటిటీలు లేదా URL-ఎన్కోడ్ చేయబడిన సమానమైన వాటిగా మార్చే ప్రక్రియ. ఇది బ్రౌజర్ను అక్షరాలను కోడ్గా అన్వయించకుండా నిరోధిస్తుంది.
- HTML ఎన్కోడింగ్: HTMLలో ప్రత్యేక అర్థం ఉన్న అక్షరాలను ఎస్కేప్ చేయండి, ఉదాహరణకు
<
,>
,&
,"
, మరియు'
. PHPలోhtmlspecialchars()
వంటి ఫంక్షన్లను లేదా ఇతర భాషలలో సమానమైన పద్ధతులను ఉపయోగించండి. - URL ఎన్కోడింగ్: URLలలో ప్రత్యేక అర్థం ఉన్న అక్షరాలను ఎన్కోడ్ చేయండి, ఉదాహరణకు స్పేస్లు, స్లాష్లు మరియు ప్రశ్నార్థకాలు. PHPలో
urlencode()
వంటి ఫంక్షన్లను లేదా ఇతర భాషలలో సమానమైన పద్ధతులను ఉపయోగించండి. - జావాస్క్రిప్ట్ ఎన్కోడింగ్: జావాస్క్రిప్ట్లో ప్రత్యేక అర్థం ఉన్న అక్షరాలను ఎస్కేప్ చేయండి, ఉదాహరణకు సింగిల్ కోట్స్, డబుల్ కోట్స్ మరియు బ్యాక్స్లాష్లు.
JSON.stringify()
వంటి ఫంక్షన్లను లేదాESAPI
(ఎన్కోడర్) వంటి లైబ్రరీలను ఉపయోగించండి.
ఉదాహరణ (జావాస్క్రిప్ట్ - HTML ఎన్కోడింగ్):
function escapeHTML(str) {
let div = document.createElement('div');
div.appendChild(document.createTextNode(str));
return div.innerHTML;
}
let userInput = '<script>alert("XSS దాడి");</script>';
let encodedInput = escapeHTML(userInput);
// ఎన్కోడ్ చేసిన ఇన్పుట్ను DOMకి అవుట్పుట్ చేయండి
document.getElementById('output').innerHTML = encodedInput; // అవుట్పుట్: <script>alert("XSS దాడి");</script>
ఉదాహరణ (పైథాన్ - HTML ఎన్కోడింగ్):
import html
user_input = '<script>alert("XSS దాడి");</script>'
encoded_input = html.escape(user_input)
print(encoded_input) # అవుట్పుట్: <script>alert("XSS దాడి");</script>
సందర్భ-అవగాహన ఎన్కోడింగ్
మీరు ఉపయోగించే ఎన్కోడింగ్ రకం డేటా ప్రదర్శించబడే సందర్భంపై ఆధారపడి ఉంటుంది. ఉదాహరణకు, మీరు ఒక HTML అట్రిబ్యూట్లో డేటాను ప్రదర్శిస్తున్నట్లయితే, మీరు HTML అట్రిబ్యూట్ ఎన్కోడింగ్ను ఉపయోగించాలి. మీరు జావాస్క్రిప్ట్ స్ట్రింగ్లో డేటాను ప్రదర్శిస్తున్నట్లయితే, మీరు జావాస్క్రిప్ట్ స్ట్రింగ్ ఎన్కోడింగ్ను ఉపయోగించాలి.
ఉదాహరణ:
<input type="text" value="<?php echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8'); ?>">
ఈ ఉదాహరణలో, URL నుండి name
పారామీటర్ యొక్క విలువ ఒక ఇన్పుట్ ఫీల్డ్ యొక్క value
అట్రిబ్యూట్లో ప్రదర్శించబడుతోంది. htmlspecialchars()
ఫంక్షన్ name
పారామీటర్లోని ఏవైనా ప్రత్యేక అక్షరాలు సరిగ్గా ఎన్కోడ్ చేయబడ్డాయని నిర్ధారిస్తుంది, XSS దాడులను నివారిస్తుంది.
టెంప్లేట్ ఇంజిన్ను ఉపయోగించడం
అనేక ఆధునిక వెబ్ ఫ్రేమ్వర్క్లు మరియు టెంప్లేట్ ఇంజిన్లు (ఉదా., React, Angular, Vue.js, Twig, Jinja2) ఆటోమేటిక్ అవుట్పుట్ ఎన్కోడింగ్ మెకానిజమ్లను అందిస్తాయి. ఈ ఇంజిన్లు టెంప్లేట్లలో వేరియబుల్స్ రెండర్ చేయబడినప్పుడు వాటిని ఆటోమేటిక్గా ఎస్కేప్ చేస్తాయి, XSS బలహీనతల ప్రమాదాన్ని తగ్గిస్తాయి. ఎల్లప్పుడూ మీ టెంప్లేట్ ఇంజిన్ యొక్క అంతర్నిర్మిత ఎస్కేపింగ్ ఫీచర్లను ఉపయోగించండి.
కంటెంట్ సెక్యూరిటీ పాలసీ (CSP)
CSP అంటే ఏమిటి?
కంటెంట్ సెక్యూరిటీ పాలసీ (CSP) అనేది ఒక అదనపు భద్రతా పొర, ఇది క్రాస్-సైట్ స్క్రిప్టింగ్ (XSS) మరియు డేటా ఇంజెక్షన్ దాడులతో సహా కొన్ని రకాల దాడులను గుర్తించి, తగ్గించడంలో సహాయపడుతుంది. బ్రౌజర్ వనరులను లోడ్ చేయడానికి అనుమతించబడిన మూలాల యొక్క వైట్లిస్ట్ను నిర్వచించడానికి మిమ్మల్ని అనుమతించడం ద్వారా CSP పనిచేస్తుంది. ఈ వైట్లిస్ట్లో డొమైన్లు, ప్రోటోకాల్లు మరియు నిర్దిష్ట URLలు కూడా ఉండవచ్చు.
డిఫాల్ట్గా, బ్రౌజర్లు వెబ్ పేజీలను ఏ మూలం నుండి అయినా వనరులను లోడ్ చేయడానికి అనుమతిస్తాయి. వనరులను లోడ్ చేయగల మూలాలను పరిమితం చేయడం ద్వారా CSP ఈ డిఫాల్ట్ ప్రవర్తనను మారుస్తుంది. ఒక వెబ్సైట్ వైట్లిస్ట్లో లేని మూలం నుండి వనరును లోడ్ చేయడానికి ప్రయత్నిస్తే, బ్రౌజర్ అభ్యర్థనను నిరోధిస్తుంది.
CSP ఎలా పనిచేస్తుంది
సర్వర్ నుండి బ్రౌజర్కు HTTP రెస్పాన్స్ హెడర్ను పంపడం ద్వారా CSP అమలు చేయబడుతుంది. హెడర్లో ఆదేశాల జాబితా ఉంటుంది, ప్రతి ఒక్కటి ఒక నిర్దిష్ట రకం వనరు కోసం ఒక విధానాన్ని నిర్దేశిస్తుంది.
ఉదాహరణ CSP హెడర్:
Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://cdn.example.com; img-src 'self' data:; font-src 'self';
ఈ హెడర్ క్రింది విధానాలను నిర్వచిస్తుంది:
default-src 'self'
: వెబ్ పేజీ యొక్క మూలం (డొమైన్) నుండి మాత్రమే వనరులను లోడ్ చేయడానికి అనుమతిస్తుంది.script-src 'self' https://example.com
: అదే మూలం నుండి మరియుhttps://example.com
నుండి జావాస్క్రిప్ట్ను లోడ్ చేయడానికి అనుమతిస్తుంది.style-src 'self' https://cdn.example.com
: అదే మూలం నుండి మరియుhttps://cdn.example.com
నుండి CSSను లోడ్ చేయడానికి అనుమతిస్తుంది.img-src 'self' data:
: అదే మూలం నుండి మరియు డేటా URIల (బేస్64-ఎన్కోడ్ చేయబడిన చిత్రాలు) నుండి చిత్రాలను లోడ్ చేయడానికి అనుమతిస్తుంది.font-src 'self'
: అదే మూలం నుండి ఫాంట్లను లోడ్ చేయడానికి అనుమతిస్తుంది.
CSP ఆదేశాలు
ఇక్కడ కొన్ని అత్యంత సాధారణంగా ఉపయోగించే CSP ఆదేశాలు ఉన్నాయి:
default-src
: అన్ని వనరుల రకాలకు డిఫాల్ట్ విధానాన్ని సెట్ చేస్తుంది.script-src
: జావాస్క్రిప్ట్ ఏ మూలాల నుండి లోడ్ చేయవచ్చో నిర్వచిస్తుంది.style-src
: CSS ఏ మూలాల నుండి లోడ్ చేయవచ్చో నిర్వచిస్తుంది.img-src
: చిత్రాలు ఏ మూలాల నుండి లోడ్ చేయవచ్చో నిర్వచిస్తుంది.font-src
: ఫాంట్లు ఏ మూలాల నుండి లోడ్ చేయవచ్చో నిర్వచిస్తుంది.connect-src
: క్లయింట్ ఏ మూలాలకు కనెక్ట్ కాగలదో నిర్వచిస్తుంది (ఉదా., వెబ్సాకెట్స్, XMLHttpRequest ద్వారా).media-src
: ఆడియో మరియు వీడియో ఏ మూలాల నుండి లోడ్ చేయవచ్చో నిర్వచిస్తుంది.object-src
: ప్లగిన్లు (ఉదా., ఫ్లాష్) ఏ మూలాల నుండి లోడ్ చేయవచ్చో నిర్వచిస్తుంది.frame-src
: ఏ మూలాలను ఫ్రేమ్లుగా (<frame>
,<iframe>
) ఎంబెడ్ చేయవచ్చో నిర్వచిస్తుంది.base-uri
: ఒక డాక్యుమెంట్ యొక్క<base>
ఎలిమెంట్లో ఉపయోగించగల URLలను పరిమితం చేస్తుంది.form-action
: ఫారమ్లు ఏ URLలకు సమర్పించవచ్చో పరిమితం చేస్తుంది.upgrade-insecure-requests
: అసురక్షిత అభ్యర్థనలను (HTTP) సురక్షిత అభ్యర్థనలకు (HTTPS) ఆటోమేటిక్గా అప్గ్రేడ్ చేయమని బ్రౌజర్కు సూచిస్తుంది.block-all-mixed-content
: బ్రౌజర్ ఏదైనా మిశ్రమ కంటెంట్ను (HTTPSపై లోడ్ చేయబడిన HTTP కంటెంట్) లోడ్ చేయకుండా నిరోధిస్తుంది.report-uri
: CSP విధానం ఉల్లంఘించబడినప్పుడు బ్రౌజర్ ఉల్లంఘన నివేదికలను పంపవలసిన URLను నిర్దేశిస్తుంది.report-to
: `Report-To` హెడర్లో నిర్వచించబడిన ఒక సమూహం పేరును నిర్దేశిస్తుంది, ఇది ఉల్లంఘన నివేదికలను పంపడానికి ఎండ్పాయింట్లను కలిగి ఉంటుంది. ఇది `report-uri`కి మరింత ఆధునిక మరియు సౌకర్యవంతమైన ప్రత్యామ్నాయం.
CSP మూలాల జాబితా విలువలు
ప్రతి CSP ఆదేశం మూల విలువల జాబితాను అంగీకరిస్తుంది, ఇది అనుమతించబడిన మూలాలు లేదా కీలకపదాలను నిర్దేశిస్తుంది.
'self'
: వెబ్ పేజీ యొక్క మూలం నుండి వనరులను అనుమతిస్తుంది.'none'
: అన్ని మూలాల నుండి వనరులను అనుమతించదు.'unsafe-inline'
: ఇన్లైన్ జావాస్క్రిప్ట్ మరియు CSSను అనుమతిస్తుంది. ఇది సాధ్యమైనంతవరకు నివారించాలి, ఎందుకంటే ఇది XSSకు వ్యతిరేకంగా రక్షణను బలహీనపరుస్తుంది.'unsafe-eval'
:eval()
మరియు సంబంధిత ఫంక్షన్ల వాడకాన్ని అనుమతిస్తుంది. ఇది కూడా నివారించాలి, ఎందుకంటే ఇది భద్రతా లోపాలను పరిచయం చేయగలదు.'strict-dynamic'
: మార్కప్లో ఒక స్క్రిప్ట్కు స్పష్టంగా ఇవ్వబడిన నమ్మకం, నాన్స్ లేదా హాష్ ద్వారా, ఆ రూట్ స్క్రిప్ట్ ద్వారా లోడ్ చేయబడిన అన్ని స్క్రిప్ట్లకు ప్రచారం చేయబడుతుందని నిర్దేశిస్తుంది.https://example.com
: ఒక నిర్దిష్ట డొమైన్ నుండి వనరులను అనుమతిస్తుంది.*.example.com
: ఒక నిర్దిష్ట డొమైన్ యొక్క ఏదైనా సబ్డొమైన్ నుండి వనరులను అనుమతిస్తుంది.data:
: డేటా URIలను (బేస్64-ఎన్కోడ్ చేయబడిన చిత్రాలు) అనుమతిస్తుంది.mediastream:
: `media-src` కోసం `mediastream:` URIలను అనుమతిస్తుంది.blob:
: `blob:` URIలను (బ్రౌజర్ మెమరీలో నిల్వ చేయబడిన బైనరీ డేటా కోసం ఉపయోగిస్తారు) అనుమతిస్తుంది.filesystem:
: `filesystem:` URIలను (బ్రౌజర్ శాండ్బాక్స్డ్ ఫైల్సిస్టమ్లో నిల్వ చేయబడిన ఫైల్లను యాక్సెస్ చేయడానికి ఉపయోగిస్తారు) అనుమతిస్తుంది.nonce-{random-value}
: సరిపోలేnonce
అట్రిబ్యూట్ ఉన్న ఇన్లైన్ స్క్రిప్ట్లు లేదా స్టైల్స్ను అనుమతిస్తుంది.sha256-{hash-value}
: సరిపోలేsha256
హాష్ ఉన్న ఇన్లైన్ స్క్రిప్ట్లు లేదా స్టైల్స్ను అనుమతిస్తుంది.
CSPని అమలు చేయడం
CSPని అమలు చేయడానికి అనేక మార్గాలు ఉన్నాయి:
- HTTP హెడర్: CSPని అమలు చేయడానికి అత్యంత సాధారణ మార్గం సర్వర్ యొక్క రెస్పాన్స్లో
Content-Security-Policy
HTTP హెడర్ను సెట్ చేయడం. - మెటా ట్యాగ్: HTML డాక్యుమెంట్లో
<meta>
ట్యాగ్ను ఉపయోగించి కూడా CSPని నిర్వచించవచ్చు. అయితే, ఈ పద్ధతి తక్కువ సౌకర్యవంతంగా ఉంటుంది మరియు కొన్ని పరిమితులను కలిగి ఉంటుంది (ఉదా., ఇదిframe-ancestors
ఆదేశాన్ని నిర్వచించడానికి ఉపయోగించబడదు).
ఉదాహరణ (HTTP హెడర్ ద్వారా CSPని సెట్ చేయడం - అపాచీ):
మీ అపాచీ కాన్ఫిగరేషన్ ఫైల్లో (ఉదా., .htaccess
లేదా httpd.conf
), ఈ క్రింది పంక్తిని జోడించండి:
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://cdn.example.com; img-src 'self' data:; font-src 'self';"
ఉదాహరణ (HTTP హెడర్ ద్వారా CSPని సెట్ చేయడం - ఇంజిన్ఎక్స్):
మీ ఇంజిన్ఎక్స్ కాన్ఫిగరేషన్ ఫైల్లో (ఉదా., nginx.conf
), server
బ్లాక్లో ఈ క్రింది పంక్తిని జోడించండి:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://cdn.example.com; img-src 'self' data:; font-src 'self';";
ఉదాహరణ (మెటా ట్యాగ్ ద్వారా CSPని సెట్ చేయడం):
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://cdn.example.com; img-src 'self' data:; font-src 'self';">
CSPని పరీక్షించడం
మీ CSP అమలు ఆశించిన విధంగా పనిచేస్తుందని నిర్ధారించుకోవడానికి దాన్ని పరీక్షించడం చాలా ముఖ్యం. Content-Security-Policy
హెడర్ను తనిఖీ చేయడానికి మరియు ఏవైనా ఉల్లంఘనల కోసం బ్రౌజర్ డెవలపర్ టూల్స్ను ఉపయోగించవచ్చు.
CSP రిపోర్టింగ్
CSP రిపోర్టింగ్ను కాన్ఫిగర్ చేయడానికి `report-uri` లేదా `report-to` ఆదేశాలను ఉపయోగించండి. ఇది CSP విధానం ఉల్లంఘించబడినప్పుడు మీ సర్వర్కు నివేదికలను స్వీకరించడానికి అనుమతిస్తుంది. ఈ సమాచారం భద్రతా లోపాలను గుర్తించడానికి మరియు పరిష్కరించడానికి అమూల్యమైనది.
ఉదాహరణ (report-uriతో CSP):
Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint;
ఉదాహరణ (report-toతో CSP - మరింత ఆధునికమైనది):
Report-To: {"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"https://your-domain.com/csp-report-endpoint"}]}
Content-Security-Policy: default-src 'self'; report-to csp-endpoint;
సర్వర్-సైడ్ ఎండ్పాయింట్ (ఈ ఉదాహరణలలో `/csp-report-endpoint`) ఈ JSON నివేదికలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి కాన్ఫిగర్ చేయాలి, తదుపరి విశ్లేషణ కోసం వాటిని లాగ్ చేస్తుంది.
CSP ఉత్తమ పద్ధతులు
- కఠినమైన విధానంతో ప్రారంభించండి: అదే మూలం నుండి మాత్రమే వనరులను అనుమతించే నిర్బంధ విధానంతో ప్రారంభించండి (
default-src 'self'
). అవసరమైనప్పుడు క్రమంగా విధానాన్ని సడలించండి, అవసరమైన నిర్దిష్ట మూలాలను జోడించండి. 'unsafe-inline'
మరియు'unsafe-eval'
ను నివారించండి: ఈ ఆదేశాలు XSSకు వ్యతిరేకంగా రక్షణను గణనీయంగా బలహీనపరుస్తాయి. సాధ్యమైనంతవరకు వాటిని నివారించడానికి ప్రయత్నించండి. ఇన్లైన్ స్క్రిప్ట్లు మరియు స్టైల్స్ కోసం నాన్స్లు లేదా హాష్లను ఉపయోగించండి మరియుeval()
ను ఉపయోగించడం మానుకోండి.- ఇన్లైన్ స్క్రిప్ట్లు మరియు స్టైల్స్ కోసం నాన్స్లు లేదా హాష్లను ఉపయోగించండి: మీరు తప్పనిసరిగా ఇన్లైన్ స్క్రిప్ట్లు లేదా స్టైల్స్ను ఉపయోగించాల్సి వస్తే, వాటిని వైట్లిస్ట్ చేయడానికి నాన్స్లు లేదా హాష్లను ఉపయోగించండి.
- CSP రిపోర్టింగ్ను ఉపయోగించండి: విధానం ఉల్లంఘించబడినప్పుడు నోటిఫికేషన్లను స్వీకరించడానికి CSP రిపోర్టింగ్ను కాన్ఫిగర్ చేయండి. ఇది భద్రతా లోపాలను గుర్తించడానికి మరియు పరిష్కరించడంలో మీకు సహాయపడుతుంది.
- మీ CSP అమలును క్షుణ్ణంగా పరీక్షించండి:
Content-Security-Policy
హెడర్ను తనిఖీ చేయడానికి మరియు ఏవైనా ఉల్లంఘనల కోసం బ్రౌజర్ డెవలపర్ టూల్స్ను ఉపయోగించండి. - CSP జనరేటర్ను ఉపయోగించండి: అనేక ఆన్లైన్ టూల్స్ మీ నిర్దిష్ట అవసరాల ఆధారంగా CSP హెడర్లను రూపొందించడంలో సహాయపడతాయి.
- CSP నివేదికలను పర్యవేక్షించండి: సంభావ్య భద్రతా సమస్యలను గుర్తించడానికి మరియు మీ విధానాన్ని మెరుగుపరచడానికి CSP నివేదికలను క్రమం తప్పకుండా సమీక్షించండి.
- మీ CSPని తాజాగా ఉంచండి: మీ వెబ్సైట్ అభివృద్ధి చెందుతున్న కొద్దీ, వనరుల డిపెండెన్సీలలో ఏవైనా మార్పులను ప్రతిబింబించేలా మీ CSPని అప్డేట్ చేసుకోండి.
- కంటెంట్ సెక్యూరిటీ పాలసీ (CSP) లింటర్ను ఉపయోగించడాన్ని పరిగణించండి: `csp-html-webpack-plugin` లేదా బ్రౌజర్ ఎక్స్టెన్షన్ల వంటి టూల్స్ మీ CSP కాన్ఫిగరేషన్ను ధృవీకరించడానికి మరియు ఆప్టిమైజ్ చేయడానికి సహాయపడతాయి.
- CSPని క్రమంగా అమలు చేయండి (రిపోర్ట్-ఓన్లీ మోడ్): ప్రారంభంలో `Content-Security-Policy-Report-Only` హెడర్ను ఉపయోగించి CSPని "రిపోర్ట్-ఓన్లీ" మోడ్లో triển khai చేయండి. ఇది వనరులను వాస్తవంగా నిరోధించకుండా సంభావ్య విధాన ఉల్లంఘనలను పర్యవేక్షించడానికి మిమ్మల్ని అనుమతిస్తుంది. దాన్ని అమలు చేయడానికి ముందు మీ CSPని మెరుగుపరచడానికి నివేదికలను విశ్లేషించండి.
ఉదాహరణ (నాన్స్ అమలు):
సర్వర్-సైడ్ (నాన్స్ జనరేట్ చేయండి):
<?php
$nonce = base64_encode(random_bytes(16));
?>
HTML:
<script nonce="<?php echo $nonce; ?>">
// మీ ఇన్లైన్ స్క్రిప్ట్ ఇక్కడ
console.log('నాన్స్తో ఇన్లైన్ స్క్రిప్ట్');
</script>
CSP హెడర్:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-<?php echo $nonce; ?>';
CSP మరియు థర్డ్-పార్టీ లైబ్రరీలు
థర్డ్-పార్టీ లైబ్రరీలు లేదా CDNలను ఉపయోగిస్తున్నప్పుడు, మీ CSP విధానంలో వాటి డొమైన్లను చేర్చాలని నిర్ధారించుకోండి. ఉదాహరణకు, మీరు CDN నుండి jQueryని ఉపయోగిస్తున్నట్లయితే, మీరు CDN యొక్క డొమైన్ను script-src
ఆదేశానికి జోడించాల్సి ఉంటుంది.
అయితే, మొత్తం CDNలను గుడ్డిగా వైట్లిస్ట్ చేయడం భద్రతా ప్రమాదాలను పరిచయం చేయగలదు. CDNల నుండి లోడ్ చేయబడిన ఫైల్ల సమగ్రతను ధృవీకరించడానికి సబ్రిసోర్స్ ఇంటిగ్రిటీ (SRI)ని ఉపయోగించడాన్ని పరిగణించండి.
సబ్రిసోర్స్ ఇంటిగ్రిటీ (SRI)
SRI అనేది ఒక భద్రతా ఫీచర్, ఇది CDNలు లేదా ఇతర థర్డ్-పార్టీ మూలాల నుండి పొందిన ఫైల్లు మార్పు చేయబడలేదని బ్రౌజర్లు ధృవీకరించడానికి అనుమతిస్తుంది. పొందిన ఫైల్ యొక్క క్రిప్టోగ్రాఫిక్ హాష్ను తెలిసిన హాష్తో పోల్చడం ద్వారా SRI పనిచేస్తుంది. హాష్లు సరిపోలకపోతే, బ్రౌజర్ ఫైల్ను లోడ్ చేయకుండా నిరోధిస్తుంది.
ఉదాహరణ:
<script src="https://example.com/jquery.min.js" integrity="sha384-example-hash" crossorigin="anonymous"></script>
integrity
అట్రిబ్యూట్ jquery.min.js
ఫైల్ యొక్క క్రిప్టోగ్రాఫిక్ హాష్ను కలిగి ఉంటుంది. విభిన్న మూలాల నుండి సర్వ్ చేయబడిన ఫైల్లతో SRI పనిచేయడానికి crossorigin
అట్రిబ్యూట్ అవసరం.
ముగింపు
ఫ్రంటెండ్ సెక్యూరిటీ అనేది వెబ్ డెవలప్మెంట్లో ఒక కీలకమైన అంశం. XSS నివారణ పద్ధతులు మరియు కంటెంట్ సెక్యూరిటీ పాలసీ (CSP)ని అర్థం చేసుకుని, అమలు చేయడం ద్వారా, మీరు దాడుల ప్రమాదాన్ని గణనీయంగా తగ్గించవచ్చు మరియు మీ వినియోగదారుల డేటాను రక్షించవచ్చు. ఇన్పుట్ ధృవీకరణ, అవుట్పుట్ ఎన్కోడింగ్, CSP, మరియు ఇతర భద్రతా ఉత్తమ పద్ధతులను కలపడం ద్వారా బహుళ-స్థాయి విధానాన్ని అనుసరించాలని గుర్తుంచుకోండి. సురక్షితమైన మరియు పటిష్టమైన వెబ్ అప్లికేషన్లను రూపొందించడానికి తాజా భద్రతా బెదిరింపులు మరియు నివారణ పద్ధతులతో తాజాగా ఉండండి మరియు నేర్చుకుంటూ ఉండండి.
ఈ గైడ్ XSS నివారణ మరియు CSP యొక్క ప్రాథమిక అవగాహనను అందిస్తుంది. భద్రత అనేది ఒక నిరంతర ప్రక్రియ అని గుర్తుంచుకోండి మరియు సంభావ్య బెదిరింపుల కంటే ముందు ఉండటానికి నిరంతర అభ్యాసం అవసరం. ఈ ఉత్తమ పద్ధతులను అమలు చేయడం ద్వారా, మీరు మీ వినియోగదారుల కోసం మరింత సురక్షితమైన మరియు నమ్మదగిన వెబ్ అనుభవాన్ని సృష్టించవచ్చు.