FlawOpen

flawopen.com/क्रॉस-साइट स्क्रिप्टिंग

क्रॉस-साइट स्क्रिप्टिंग

उच्च CWE-79
भाषा: English Português (Brasil) Español Français Deutsch Русский 简体中文 日本語 हिन्दी 한국어 Bahasa Indonesia

क्रॉस-साइट स्क्रिप्टिंग तब होती है जब कोई पेज किसी यूज़र के टेक्स्ट को इस तरह शामिल करता है कि ब्राउज़र उसे HTML या JavaScript की तरह पढ़े, और वह दूसरे यूज़र्स के लिए साइट के अपने अधिकार से चल जाए। सुधार हर जगह एक ही है: हर मान को ठीक उस जगह के अनुसार एनकोड करें जहाँ वह लिखा जाता है, जिन इक्का-दुक्का फ़ील्ड में HTML चाहिए उन्हें सैनिटाइज़ करें, और दोनों को Content Security Policy से मज़बूत करें। सटीक API, कमज़ोर और सुधरा कोड, और इसे पकड़ने वाले CI नियम देखने के लिए नीचे अपनी भाषा चुनें।

आसान भाषा में (ELI5)

एक अख़बार पाठकों के पत्र अपने ही पन्नों पर छापता है। एक पाठक ऐसा पत्र भेजता है जो बिल्कुल संपादक की सूचना जैसा सजाया गया है: 'ग्राहक इस नंबर पर फ़ोन करके सदस्यता नवीनीकरण के लिए अपने कार्ड की जानकारी बताएँ।' अख़बार के अपने फ़ॉन्ट में छपा होने से पाठक उस पर वैसे ही भरोसा करते हैं जैसे संपादक ने ख़ुद लिखा हो। XSS का मतलब है वेबसाइट का किसी विज़िटर के टेक्स्ट को अपने ही पेज में छाप देना, जहाँ ब्राउज़र उसे वेबसाइट का अपना कोड मानकर आपके खाते तक वेबसाइट की पहुँच के साथ चला देता है। एस्केपिंग हर पत्र को साफ़ चिह्नित उद्धरण-बॉक्स के अंदर छापना है, ताकि कोई भी पत्र संपादक की सूचना बनकर न निकल सके।

इस पेज के मुख्य शब्द

Cross-site scripting (CWE-79)
कोई वेब पेज अविश्वसनीय डेटा को ब्राउज़र के लिए निष्क्रिय किए बिना शामिल करता है, इसलिए उस डेटा का मार्कअप या स्क्रिप्ट पेज के origin में पार्स होकर चलता है, और DOM, cookies व API तक पहुँच पा लेता है।
Reflected, stored and DOM-based XSS
Reflected XSS रिक्वेस्ट का डेटा सीधे रिस्पॉन्स में लौटा देता है, आम तौर पर तैयार किए गए लिंक से। Stored XSS मान को सेव करके हर देखने वाले को परोसता है। DOM-based XSS सर्वर तक पहुँचता ही नहीं: क्लाइंट का JavaScript URL या storage से डेटा उठाकर innerHTML जैसे sink में डाल देता है।
Contextual output encoding
हर आउटपुट संदर्भ की अपनी एनकोडिंग चाहिए: element टेक्स्ट और कोट वाले एट्रिब्यूट के लिए HTML entity, स्क्रिप्ट के अंदर JavaScript string escaping, URL पैरामीटर में percent-encoding, और href व src के लिए scheme जाँच। स्क्रिप्ट के अंदर रखे मान को सिर्फ़ HTML-एनकोड करना काफ़ी नहीं है।
Sanitizing vs encoding
एनकोडिंग मार्कअप को टेक्स्ट की तरह दिखाती है। जब यूज़र को फ़ॉर्मेटिंग भेजनी हो, तो HTML को अनुमति-सूची वाले सैनिटाइज़र (DOMPurify, bleach का उत्तराधिकारी nh3, OWASP Java HTML Sanitizer, HtmlSanitizer, ammonia) से गुज़ारें, जो मान्य टैग रखता है और स्क्रिप्ट, इवेंट हैंडलर व javascript: URL हटा देता है।
Content Security Policy (CSP)
एक रिस्पॉन्स header जो ब्राउज़र को बताता है कि कौन-सी स्क्रिप्ट चल सकती हैं। 'unsafe-inline' के बिना nonce-आधारित script-src एनकोडिंग की कोई चूक रह जाने पर भी ज़्यादातर डाली गई स्क्रिप्ट रोक देती है, और require-trusted-types-for 'script' DOM sinks को बंद कर देता है।

हमले का चरण-दर-चरण प्रवाह

चरण 1

अविश्वसनीय टेक्स्ट पेज तक पहुँचता है

सर्च शब्द, प्रोफ़ाइल फ़ील्ड, टिप्पणी, URL fragment या API रिस्पॉन्स सर्वर पर पेज बनाते समय या ब्राउज़र में अपडेट करते समय शामिल किया जाता है।

चरण 2

वह सही एनकोडिंग के बिना लिखा जाता है

टेम्पलेट की एस्केपिंग बंद है, मान ऐसे स्क्रिप्ट या URL संदर्भ में जाता है जिसे HTML एस्केपिंग नहीं संभालती, या क्लाइंट कोड उसे innerHTML में रख देता है। हानिरहित टेस्ट मान <img src=x onerror=alert(1)> बिना बदले बचा रहता है।

चरण 3

ब्राउज़र उसे कोड की तरह पढ़ता है

पीड़ित का ब्राउज़र असली <img> एलिमेंट बनाकर onerror चलाता है, या क्लिक करने पर javascript: लिंक चला देता है।

चरण 4

स्क्रिप्ट वेबसाइट बनकर काम करती है

यह साइट के origin के साथ चलती है: पेज पढ़ सकती है, पीड़ित की cookies या टोकन से साइट के API बुला सकती है, यूज़र को दिखने वाली चीज़ें बदल सकती है और उसकी ओर से फ़ॉर्म भेज सकती है।

भाषा के अनुसार XSS गाइड

Python JavaScript Go Java PHP C# Ruby C/C++ Rust Kotlin Swift

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

संबंधित लेख

Reflected, stored और DOM XSS की व्याख्या क्या एस्केपिंग काफ़ी है? CSP या एस्केपिंग? क्या DOMPurify काफ़ी है? Markdown रेंडरिंग से XSS