Table of Contents

क्रॉस-साइट स्क्रिप्टिंग (XSS) और जावास्क्रिप्ट डिफेंस का परिचय

क्रॉस साइट स्क्रिप्टिंग (XSS) सबसे प्रचलित वेब सुरक्षा भेद्यताओं में से एक है, जो लगातार OWASP टॉप 10 में रैंकिंग में है। एक XSS हमला अन्य उपयोगकर्ताओं द्वारा देखे गए वेब पृष्ठों में दुर्भावनापूर्ण क्लाइंट-साइड स्क्रिप्ट लगाने की अनुमति देता है। ये स्क्रिप्ट सत्र टोकन चुरा सकती हैं, उपयोगकर्ताओं को फ़िशिंग साइटों, deface पृष्ठों, या मैलवेयर स्थापित करने के लिए पुनर्निर्देशित कर सकती हैं। जबकि सर्वर-साइड सैनिटाइजेशन महत्वपूर्ण है, जावास्क्रिप्ट इन हमलों को पहचानने और रोकने के लिए क्लाइंट साइड पर एक महत्वपूर्ण भूमिका निभाता है। यह लेख XSS से अपने अनुप्रयोगों की रक्षा के लिए जावास्क्रिप्ट का उपयोग करने के लिए एक व्यापक, उत्पादन-पढ़ाने वाला मार्गदर्शिका प्रदान करता है।

XSS के तीन प्रकार को समझना

रोकथाम में डाइविंग से पहले, XSS की तीन प्राथमिक श्रेणियों को समझना आवश्यक है: संग्रहीत, प्रतिबिंबित और DOM-आधारित। प्रत्येक को थोड़ा अलग पता लगाने और रोकथाम दृष्टिकोण की आवश्यकता होती है।

स्टोर XSS

स्टोर (प्रतिरोधक) XSS तब होता है जब दुर्भावनापूर्ण इनपुट स्थायी रूप से सर्वर पर संग्रहीत होता है (उदाहरण के लिए, डेटाबेस में, मंच पोस्ट, या टिप्पणी) और बाद में उचित स्वच्छता के बिना उपयोगकर्ताओं को सेवा दी जाती है। हमला पेलोड संग्रहीत सामग्री को देखने वाले किसी के ब्राउज़र में निष्पादित होता है।

XSS परिलक्षित

जब XSS को प्रतिबिंबित किया जाता है, तो दुर्भावनापूर्ण स्क्रिप्ट एक वेब सर्वर को प्रतिबिंबित करती है, आमतौर पर एक URL पैरामीटर या फॉर्म सबमिशन के माध्यम से। हमलावर एक पीड़ित को एक शिल्प लिंक पर क्लिक करने में चाल जाता है, और इंजेक्ट कोड तुरंत निष्पादित होता है। संग्रहीत XSS के विपरीत, पेलोड जारी नहीं रहता है।

DOM-Based XSS

DOM-based XSS एक विशुद्ध रूप से ग्राहक-साइड वेल्नरायबिलिटी है। हमला पेलोड पीड़ित के ब्राउज़र में DOM पर्यावरण को संशोधित करता है। दुर्भावनापूर्ण कोड कभी सर्वर को छूता नहीं है; यह क्लाइंट-साइड जावास्क्रिप्ट से उत्पन्न होता है जो उपयोगकर्ता इनपुट को असुरक्षित रूप से संभालता है (उदाहरण के लिए, से पढ़ रहा है, , या ]).

जावास्क्रिप्ट के साथ XSS हमलों का पता लगाना

डिटेक्शन से पहले संदिग्ध गतिविधि की पहचान करने के बारे में है। जावास्क्रिप्ट उपयोगकर्ता इनपुट, ट्रैक DOM उत्परिवर्तन की निगरानी कर सकता है और प्रवेश बिंदुओं पर डेटा को मान्य कर सकता है। जबकि क्लाइंट-साइड डिटेक्शन सभी हमलों को नहीं पकड़ सकता है (विशेष रूप से अगर हमलावर शिल्प सीधे सर्वर पर अनुरोध करता है), तो यह रक्षा की एक मूल्यवान पहली पंक्ति प्रदान करता है।

इनपुट सत्यापन और स्वच्छता

हमेशा प्रोसेसिंग से पहले ग्राहक पक्ष पर उपयोगकर्ता इनपुट को मान्य और साफ करें। स्क्रिप्ट निष्पादन को रोकने के लिए के बजाय का उपयोग करें। निम्नलिखित फ़ंक्शन स्ट्रिंग से खतरनाक वर्णों को स्ट्रिप्स:

function sanitizeInput(input) {
 const div = document.createElement('div');
 div.textContent = input;
 return div.innerHTML;
}

यह काम करता है क्योंकि सेटिंग HTML टैग की व्याख्या नहीं करता है; यह सब कुछ सादे पाठ के रूप में व्यवहार करता है। परिणामी में किसी भी HTML विशेष वर्ण (जैसे, ], , ]]]]]]] के बचे हुए संस्करण शामिल हैं।

संदिग्ध तत्वों के लिए निगरानी डोम म्यूटेशन

हमलावर अक्सर टैग या घटना हैंडलर (]]], ]]]) को DOM में इंजेक्ट करते हैं। API का उपयोग करके, आप अप्रत्याशित तत्व सम्मिलन के लिए देख सकते हैं। एक बुनियादी उदाहरण:

const observer = new MutationObserver((mutations) => {
 mutations.forEach((mutation) => {
 mutation.addedNodes.forEach((node) => {
 if (node.nodeType === 1) { // element node
 if (node.tagName === 'SCRIPT') {
 console.warn('Potential XSS: a script element was injected via DOM.');
 node.remove(); // or log and analyze
 }
 // Check for dangerous attributes
 if (node.hasAttribute('onerror') || node.hasAttribute('onload')) {
 console.warn('Suspicious event handler attribute detected.');
 }
 }
 });
 });
});
observer.observe(document.body, { childList: true, subtree: true });

Caution:]] के माध्यम से अवरुद्ध स्क्रिप्ट को चालाक हमलावरों द्वारा बाईपास किया जा सकता है और वैध कार्यक्षमता को तोड़ सकता है। इसे प्राथमिक रोकथाम तंत्र के बजाय निगरानी उपकरण के रूप में उपयोग करें।

URL और हैश पैरामीटर्स को मान्य करना

DOM-based XSS के लिए, URL घटकों को सुरक्षित रूप से का उपयोग करके पढ़ें और HTML में सीधे डालने वाले मूल्यों से बचें। निष्पादन योग्य कोड को पारित करने का प्रयास करें:

const params = new URLSearchParams(window.location.search);
const userParam = params.get('name');
if (userParam && /[<>"'\/]/.test(userParam)) {
 console.warn('Potential XSS in parameter: ' + userParam);
 // Do not use this value in the DOM without encoding
}

जावास्क्रिप्ट के साथ XSS हमलों को रोकने

रोकथाम के लिए बहु-परत दृष्टिकोण की आवश्यकता होती है। जावास्क्रिप्ट अकेले एक आवेदन को पूरी तरह से सुरक्षित नहीं कर सकता है, लेकिन जब उचित बैकेंड सैनिटाइजेशन के साथ संयुक्त हो जाता है और Content Security Policy (CSP) ], यह नाटकीय रूप से जोखिम को कम करता है।

सभी उपयोगकर्ता नियंत्रित डेटा को डीओएम में डालने से पहले एनकोड करें

सुनहरा नियम: सीधे डीओएम में अविश्वासित डेटा कभी नहीं डाला जाता है। आंतरिक एचटीएमएल के बजाय सुरक्षित डीओएम विधियों का उपयोग करें।

] का प्रयोग करें ]]

const userInput = getUserInput();
const safeText = document.createTextNode(userInput);
document.getElementById('output').appendChild(safeText);

जब आप उपयोग करना चाहिए ], पुस्तकालय के साथ स्वच्छता

यदि आपको HTML (जैसे, अमीर पाठ संपादक से) को प्रस्तुत करने की पूरी आवश्यकता है, तो एक विश्वसनीय स्वच्छता पुस्तकालय जैसे DOMPurify] पर भरोसा करें। DOMPurify एक व्यापक रूप से इस्तेमाल किया जाने वाला, युद्ध-परीक्षण पुस्तकालय है जो सुरक्षित HTML को संरक्षित करते समय दुर्भावनापूर्ण कोड को हटा देता है।

// Example with DOMPurify (install via npm or CDN)
const dirty = '<img src=x onerror="alert(1)">';
const clean = DOMPurify.sanitize(dirty);
document.getElementById('content').innerHTML = clean;

DOMPurify इनपुट को पार करके काम करता है, खतरनाक टैग और विशेषताओं को छीनता है, और केवल अनुमति तत्वों को वापस लौटाता है। GitHub पर DOMPurify देखें।

खतरनाक जावास्क्रिप्ट कार्यों से बचें

कुछ जावास्क्रिप्ट तरीकों और गुणों को XSS को सक्षम करने के लिए कुख्यात हैं।

  • ] ] ] ]]] ]] ]] ]] ] ]]]] ]]] ]]] ]] [[FLT:]]]]]]] [[FLT:[[[[FLT:[[FLT:[[[[FLT:]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] [[[[[[[[[[[[[[[[[[[[[[[
  • ]]], ]] — समान नियम।
  • ]]]]]]]]][][[]][]][]]]]]]]][]]]]][]]]]]]]]][[[[[[[[[[[[[[FLT:FLT:[[[FLT:]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]][[[
  • ]]]]]]]]][]]]]]]]]]][]]]][]]]]][[[[[[[[FLT:[[[[FLT:]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]][[[[[[[[[[[[[[[[[[[[[[[[[[[[[[FLT:[[[[[[[FLT:]]]]]]]
  • ] ]] / ]] स्ट्रिंग कोड के साथ - बचना; इसके बजाय कार्य संदर्भ का उपयोग करें।
  • ] ] निर्माता ] ]]]] ]]]]]] ]]]] ]]] ]]]]] ]]]] ]]]] ]]] [[FLT:>]]]] [[FLT:>]]]]]]] [[FLT:[[FLT:[[FLT:[[[[[FLT:>]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

जावास्क्रिप्ट के माध्यम से सामग्री सुरक्षा नीति (CSP) को लागू करें? अनुशंसित नहीं है

CSP एक ब्राउज़र तंत्र है जो प्रतिबंधित करता है कि कौन से स्क्रिप्ट चल सकते हैं। यह आम तौर पर HTTP हेडर के माध्यम से सेट किया जाता है, लेकिन आप इसे टैग का उपयोग करके या जावास्क्रिप्ट के माध्यम से गतिशील रूप से ] तत्व बना सकते हैं। हालांकि, जावास्क्रिप्ट में CSP की स्थापना कम सुरक्षित है क्योंकि एक हमलावर जो पहले से ही कुछ नियंत्रण को अक्षम कर सकता है। हमेशा HTTP हेडर को पसंद करते हैं। यदि आपको CSP को लागू करने के लिए जावास्क्रिप्ट का उपयोग करना होगा (उदाहरण के लिए, विकास के दौरान), तो यह पृष्ठ लोड में बहुत जल्दी हो सकता है:

const meta = document.createElement('meta');
meta.httpEquiv = 'Content-Security-Policy';
meta.content = "default-src 'self'; script-src 'self' 'unsafe-inline'"; // Be very careful with 'unsafe-inline'
document.head.appendChild(meta);

उत्पादन के लिए, अपने वेब सर्वर या रिवर्स प्रॉक्सी में CSP को कॉन्फ़िगर करें। MDN CSP प्रलेखन व्यापक मार्गदर्शन प्रदान करता है।

अतिरिक्त सुरक्षा उपाय

जावास्क्रिप्ट-विशिष्ट रणनीति से परे, एक पूर्ण XSS रोकथाम रणनीति में इन महत्वपूर्ण उपायों को शामिल किया गया है:

  • ]]Always सर्वर पक्ष पर मान्य है। क्लाइंट-साइड सत्यापन को बायपास किया जा सकता है। कभी भी क्लाइंट डेटा पर भरोसा नहीं करता है।
  • ]] HTTP उपयुक्त प्रतिक्रिया हेडर का उपयोग करें ], , और विशेष रूप से [[FLT: 39]]]]]]].
  • ]Output हर बार जब आप उपयोगकर्ता डेटा प्रदान करते हैं तो कोडित करें। Context मामले: HTML संस्थाओं, URL एन्कोडिंग, जावास्क्रिप्ट स्ट्रिंग एन्कोडिंग आदि के लिए कोडित करें।
  • Keep निर्भरता अद्यतन किया गया। ] Vulnerable JavaScript पुस्तकालयों (जैसे, jQuery के पुराने संस्करण) एक आम XSS वेक्टर हैं। npm ऑडिट या इसी तरह के उपकरणों का उपयोग करें।
  • ]]]]React, Angular, and Vue स्वचालित रूप से डिफ़ॉल्ट रूप से आउटपुट से बच जाते हैं। फिर भी, या ] के साथ सतर्क रहें।
  • ]]एक सख्त सीएसपी को लागू करें ]] से बचें और ]] यदि संभव हो तो. गैर-आवश्यकता का प्रयोग करें या इनलाइन स्क्रिप्ट के लिए हैश.

Real World Examples: सुरक्षित टिप्पणी प्रतिपादन

एक ब्लॉग टिप्पणी प्रणाली पर विचार करें जहां उपयोगकर्ता संदेश प्रस्तुत करते हैं जो दूसरों को प्रदर्शित होते हैं। एक हमलावर डालने का प्रयास कर सकता है। यहां एक जावास्क्रिप्ट दृष्टिकोण है जो बैकएंड के साथ एकीकृत होता है:

  1. ]Frontend प्रस्तुतीकरण: सर्वर को भेजने से पहले का उपयोग करके स्वच्छता करें (लेकिन सर्वर अभी भी पवित्र होना चाहिए).
  2. Server रिटर्न डेटा: बैकेंड को HTML-encode करना चाहिए टिप्पणी पाठ.
  3. ]Client rendering: का प्रयोग ] या एक सुरक्षित टेम्पलेट इंजन. कभी भी कच्चे उपयोगकर्ता डेटा के साथ का उपयोग नहीं किया जाता है।
function renderComment(comment) {
 const item = document.createElement('div');
 item.className = 'comment';
 const body = document.createElement('p');
 body.textContent = comment.body; // escaped by browser
 item.appendChild(body);
 document.getElementById('comments').appendChild(item);
}

अपने बचाव का परीक्षण

रोकथाम को लागू करने के बाद, स्वचालित स्कैनर और मैनुअल पेलोड का उपयोग करके अपने आवेदन का परीक्षण करें। आम परीक्षण वेक्टर में शामिल हैं:

  • ]]
  • [[FLT::50]]]]
  • ]]
  • ]]
  • ]]

DOM की जांच के लिए ब्राउज़र डेवलपर टूल का उपयोग करें और पेलोड को सुनिश्चित करने के लिए बच गए हैं। इसके अलावा, उल्लंघन रिपोर्ट के लिए कंसोल की जांच करके CSP प्रवर्तन का परीक्षण करें।

निष्कर्ष

क्रॉस साइट स्क्रिप्टिंग एक गंभीर खतरा रहता है, लेकिन जावास्क्रिप्ट दोनों का पता लगाने और रोकथाम के लिए शक्तिशाली उपकरण प्रदान करता है। इनपुट को मान्य करके, डीओएम परिवर्तन की निगरानी, आउटपुट को अलग करना और डीओएमपीurify जैसे मजबूत पुस्तकालयों के साथ एकीकृत करना, आप अपने ग्राहक के पक्ष में सुरक्षा को काफी कठोर बना सकते हैं। याद रखें कि क्लाइंट-साइड उपाय एक रजत बुलेट नहीं हैं; वे एक रक्षा-इन-डेप्थ रणनीति का पूरक हैं जिसमें सर्वर-साइड सैनिटाइजेशन, सीएसपी हेडर और नियमित सुरक्षा लेखा परीक्षा शामिल हैं। सतर्कता, परीक्षण अक्सर रहें, और अपने पुस्तकालयों को तारीख तक बनाए रखें।

आगे पढ़ने के लिए, OWASP XSS पेज और ]OWASP XSS रोकथाम धोखा शीट ]]]]] से परामर्श करें।