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

क्रॉस-साइट स्क्रिप्टिंग (XSS) एक प्रकार की सुरक्षा भेद्यता (कंप्यूटर विज्ञान) है जो कुछ वेब एप्लिकेशन में पाई जा सकती है। XSS हमले अटैकर्स को अन्य उपयोगकर्ताओं द्वारा देखे गए वेब पेजों में क्लाइंट-साइड स्क्रिप्ट इंजेक्ट करने में सक्षम बनाते हैं। क्रॉस-साइट स्क्रिप्टिंग भेद्यता का उपयोग हमलावरों द्वारा एक्सेस कंट्रोल जैसे समान-मूल नीति को बायपास करने के लिए किया जा सकता है। 2007 तक, सिमेंटेक द्वारा प्रलेखित सभी सुरक्षा भेद्यता में से लगभग 84% को वेबसाइटों पर क्रॉस-साइट स्क्रिप्टिंग के लिए उत्तरदायी ठहराया गया था। XSS प्रभाव कमजोर साइट द्वारा संभाले गए डेटा की संवेदनशीलता और साइट के स्वामित्व वाले नेटवर्क द्वारा लागू किए गए किसी भी सुरक्षा न्यूनीकरण की प्रकृति के आधार पर मामूली उपद्रवों से लेकर महत्वपूर्ण सुरक्षा विपत्ति तक भिन्न होते हैं।

पृष्ठभूमि
वेब पर सुरक्षा विभिन्न तंत्रों पर निर्भर करती है, जिसमें विश्वास की एक अंतर्निहित अवधारणा सम्मिलित है जिसे समान-मूल नीति के रूप में जाना जाता है। यह अनिवार्य रूप से बताता है कि यदि एक साइट (जैसे  https://mybank.example1.com ) की सामग्री को वेब ब्राउज़र पर संसाधनों (जैसे कुकीज़ आदि) तक पहुंचने की अनुमति दी जाती है, तो उसी (1) वाले किसी भी URL से सामग्री यूआरआई योजना, (2) होस्ट नाम, और (3) पोर्ट नंबर इन अनुमतियों को साझा करेंगे। URL की सामग्री जहां इन तीन विशेषताओं में से कोई भी भिन्न है, उन्हें अलग से अनुमतियां देनी होंगी

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

माइक्रोसॉफ्ट सुरक्षा-इंजीनियरों ने जनवरी 2000 में "क्रॉस-साइट स्क्रिप्टिंग" शब्द प्रस्तावित किया। अभिव्यक्ति क्रॉस-साइट स्क्रिप्टिंग मूल रूप से एक असंबद्ध हमले-साइट से हमलावर, थर्ड-पार्टी वेब एप्लिकेशन को लोड करने के कार्य को संदर्भित करता है, जो लक्षित डोमेन के सुरक्षा संदर्भ में हमलावर द्वारा तैयार जावास्क्रिप्ट के एक टुकड़े को निष्पादित करता है (प्रतिबिंबित या गैर-निरंतर XSS भेद्यता का लाभ उठाते हुए)। स्थिरांक और गैर-जावास्क्रिप्ट वैक्टर (एक्टिवएक्स, जावा, वीबीस्क्रिप्ट, फ्लैश, या यहां तक कि एचटीएमएल स्क्रिप्ट सहित) सहित कोड इंजेक्शन के अन्य तरीकों को शामिल करने के लिए परिभाषा का धीरे-धीरे विस्तार हुआ, जिससे सूचना सुरक्षा के क्षेत्र में नवागंतुकों को कुछ भ्रम हुआ।

11990 के दशक के बाद से XSS भेद्यता की सूचना दी गई और उसका शोषण किया गया था। अतीत में प्रभावित प्रमुख साइटों में सोशल-नेटवर्किंग साइट्स ट्विटर और फेसबुक सम्मिलित हैं। 2007 में कुछ शोधकर्ताओं ने अनुमान लगाया कि 68% वेबसाइटों के XSS हमलों के लिए खुले होने की संभावना के साथ क्रॉस-साइट स्क्रिप्टिंग दोष बफर ओवरफ्लो को पार कर सबसे आम सार्वजनिक रूप से रिपोर्ट की गई सुरक्षा भेद्यता बन गई है।

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

गैर स्थायी (प्रतिबिंबित)
गैर-स्थायी (या प्रतिबिंबित) क्रॉस-साइट स्क्रिप्टिंग भेद्यताएं अब तक की सबसे मौलिक प्रकार की वेब भेद्यता हैं। ये होल तब दिखाई देते हैं जब वेब क्लाइंट द्वारा प्रदान किया गया डेटा, साधारणतया HTTP क्वेरी पैरामीटर (जैसे HTML फॉर्म सबमिशन) में, सर्वर-साइड स्क्रिप्ट द्वारा तुरंत उपयोग किया जाता है और उस उपयोगकर्ता के लिए और उस उपयोगकर्ता के लिए परिणामों का एक पृष्ठ प्रदर्शित करने के लिए, सामग्री को ठीक से HTML कुशलता के बिना है।

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

प्रतिबिंबित हमला सामान्यता  ईमेल या तटस्थ वेबसाइट के माध्यम से दिया जाता है। प्रलोभन निर्दोष दिखने वाला URL है जो एक विश्वसनीय साइट की ओर संकेत करता है लेकिन इसमें XSS वेक्टर होता है। यदि विश्वसनीय साइट वेक्टर के लिए असुरक्षित है, तो लिंक पर क्लिक करने से पीड़ित का ब्राउज़र इंजेक्ट की गई स्क्रिप्ट को निष्पादित कर सकता है।

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

उदाहरण के लिए, मान लीजिए कि एक डेटिंग वेबसाइट है जहां सदस्य अन्य सदस्यों के प्रोफाइल को स्कैन करते हैं यह देखने के लिए कि क्या वे दिलचस्प लग रहे हैं। गोपनीयता कारणों से, यह साइट सभी का वास्तविक नाम और ईमेल छुपाती है। इन्हें सर्वर पर गुप्त रखा जाता है। किसी सदस्य का वास्तविक नाम और ईमेल ब्राउज़र में केवल तभी होता है जब सदस्य लॉग इन करें होता है, और वे किसी और का नाम नहीं देख सकते हैं।

मान लीजिए कि मैलोरी, एक हमलावर, साइट से जुड़ती है और उन लोगों के वास्तविक नामों का पता लगाना चाहती है जिन्हें वह साइट पर देखती है। ऐसा करने के लिए, वह एक स्क्रिप्ट लिखती है जिसे अन्य उपयोगकर्ताओं के ब्राउज़र से चलने के लिए डिज़ाइन किया गया है जब वे उसकी प्रोफ़ाइल पर जाते हैं। स्क्रिप्ट तब अपने स्वयं के सर्वर को एक त्वरित संदेश भेजती है, जो यह जानकारी एकत्र करता है।

ऐसा करने के लिए, प्रश्न के लिए अपनी आदर्श पहली तारीख का वर्णन करें, मैलोरी एक संक्षिप्त उत्तर देती है (सामान्य दिखने के लिए), लेकिन उसके उत्तर के अंत में पाठ नाम और ईमेल चुराने की उसकी स्क्रिप्ट है। यदि स्क्रिप्ट a के अंदर संलग्न है  तत्व, यह स्क्रीन पर नहीं दिखाया जाएगा। फिर मान लीजिए कि बॉब, डेटिंग साइट का एक सदस्य, मैलोरी की प्रोफ़ाइल तक पहुँचता है, जिसमें उसका फ़र्स्ट डेट प्रश्न का उत्तर है। उसकी स्क्रिप्ट ब्राउज़र द्वारा स्वचालित रूप से चलाई जाती है और बॉब के वास्तविक नाम और ईमेल की एक प्रति सीधे उसकी अपनी मशीन से चुरा लेती है।

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

इंजेक्शन के तरीके बहुत भिन्न हो सकते हैं; कुछ मामलों में, हमलावर को इस तरह के छेद का फायदा उठाने के लिए वेब कार्यक्षमता के साथ सीधे बातचीत करने की भी आवश्यकता नहीं हो सकती है। वेब एप्लिकेशन द्वारा प्राप्त कोई भी डेटा (ईमेल, सिस्टम लॉग, आईएम आदि के माध्यम से) जिसे एक हमलावर द्वारा नियंत्रित किया जा सकता है, एक इंजेक्शन वेक्टर बन सकता है।

सर्वर-साइड बनाम डोम-आधारित कमजोरियां
XSS भेद्यता मूल रूप से उन अनुप्रयोगों में पाई गई थी जो सर्वर साइड पर सभी डेटा प्रोसेसिंग का प्रदर्शन करते थे। उपयोगकर्ता इनपुट (एक XSS वेक्टर सहित) सर्वर को भेजा जाएगा, और फिर उपयोगकर्ता को एक वेब पेज के रूप में लौटाया जाएगा। एक बेहतर उपयोगकर्ता अनुभव की आवश्यकता के परिणामस्वरूप उन अनुप्रयोगों की लोकप्रियता हुई, जिनमें अधिकांश प्रस्तुति तर्क (संभवतया जावास्क्रिप्ट में लिखे गए) क्लाइंट-साइड पर काम कर रहे थे, जो डेटा, ऑन-डिमांड, AJAX का उपयोग कर सर्वर से खींच लिया था।

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

DOM-आधारित XSS भेद्यता का एक उदाहरण 2011 में कई jQuery प्लगइन्स में पाया गया बग है। DOM-आधारित XSS हमलों के लिए रोकथाम रणनीतियों में पारंपरिक XSS रोकथाम रणनीतियों के समान उपाय शामिल हैं, लेकिन जावास्क्रिप्ट कोड में लागू किया गया है और वेब पेजों में निहित है (यानी इनपुट सत्यापन और पलायन)। कुछ जावास्क्रिप्ट पुस्तकालय में इसके और अन्य प्रकार के हमलों के खिलाफ अंतर्निहित काउंटरमेशर्स हैं - उदाहरण के लिए एंगुलरजेएस।

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

उत्परिवर्तित XSS (mXSS)
उत्परिवर्तित XSS तब होता है जब हमलावर कुछ ऐसा इंजेक्ट करता है जो सुरक्षित प्रतीत होता है लेकिन मार्कअप को पार्स करते समय ब्राउज़र द्वारा फिर से लिखा और संशोधित किया जाता है। इससे वेबसाइट के एप्लिकेशन लॉजिक के भीतर इसका पता लगाना या साफ करना बेहद कठिन हो जाता है। एक उदाहरण बंद न किए गए उद्धरण चिह्नों को पुनर्संतुलित कर रहा है या यहां तक ​​कि CSS फ़ॉन्ट-फ़ैमिली के पैरामीटर पर बिना उद्धृत किए गए पैरामीटर में उद्धरण चिह्न जोड़ रहा है।

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

गैर-लगातार

 * 1) ऐलिस अक्सर किसी विशेष वेबसाइट पर जाती है, जिसे बॉब होस्ट करता है। बॉब की वेबसाइट ऐलिस को उपयोगकर्ता नाम/पासवर्ड जोड़ी के साथ लॉग इन करने की अनुमति देती है और बिलिंग जानकारी जैसे संवेदनशील डेटा संग्रहीत करती है। जब कोई उपयोगकर्ता लॉग इन करता है, तो ब्राउज़र एक प्राधिकरण कुकी रखता है, जो कुछ यादृच्छिक वर्णों की तरह दिखती है, इसलिए दोनों कंप्यूटरों (क्लाइंट और सर्वर) के पास एक रिकॉर्ड होता है कि उसने लॉग इन किया है।
 * 2) मैलोरी ने देखा कि बॉब की वेबसाइट में एक परिलक्षित XSS भेद्यता है:
 * 3) जब वह खोज पृष्ठ पर जाती है, तो वह खोज बॉक्स में एक खोज शब्द दर्ज करती है और सबमिट बटन पर क्लिक करती है। यदि कोई परिणाम नहीं मिला, तो पृष्ठ वह शब्द प्रदर्शित करेगा जिसे उसने खोजा था और उसके बाद शब्द नहीं मिला, और url होगा.
 * 4) एक सामान्य खोज क्वेरी के साथ, पिल्लों शब्द की तरह, पृष्ठ केवल पिल्लों को प्रदर्शित नहीं करता है और url http://bobssite.org/search ?q=puppies है - जो पूरी तरह से सामान्य व्यवहार है.
 * 5) हालांकि, जब वह एक असामान्य खोज क्वेरी सबमिट करती है, जैसेalert('xss');,
 * 6) एक अलर्ट बॉक्स प्रकट होता है (जो xss कहता है)।
 * 7) पाठ 'xss' के साथ एक त्रुटि संदेश के साथ पृष्ठ नहीं मिला।
 * 8) यूआरएल है  - जो शोषक व्यवहार है।
 * 9) मैलोरी भेद्यता का फायदा उठाने के लिए एक यूआरएल तैयार करती है:
 * 10) वह यूआरएल बनाती है  . वह ASCII वर्णों को प्रतिशत-एन्कोडिंग के साथ एन्कोड करना चुन सकती है, जैसे कि , ताकि मानव पाठक दुर्भावनापूर्ण URL को तुरंत समझ न सकें।
 * 11) वह बॉब की साइट के कुछ अनसुने सदस्यों को एक ई-मेल भेजती है, जिसमें कहा गया है कि कुछ प्यारे पिल्लों की जाँच करें!
 * 12) ऐलिस को ई-मेल मिलता है। वह पिल्लों से प्यार करती है और लिंक पर क्लिक करती है। यह खोजने के लिए बॉब की वेबसाइट पर जाता है, कुछ भी नहीं मिलता है, और पिल्लों को प्रदर्शित करता है जो नहीं मिला लेकिन ठीक बीच में, स्क्रिप्ट टैग चलता है (यह स्क्रीन पर अदृश्य है) और मैलोरी के प्रोग्राम authstealer.js को लोड करता है और चलाता है (XSS को ट्रिगर करता है) हमला)। एलिस इसके बारे में भूल जाती है।
 * 13) authstealer.js प्रोग्राम ऐलिस के ब्राउज़र में चलता है जैसे कि यह बॉब की वेबसाइट से उत्पन्न हुआ हो। यह ऐलिस के प्राधिकरण कुकी की एक प्रति लेता है और इसे मैलोरी के सर्वर पर भेजता है, जहां मैलोरी इसे पुनः प्राप्त करता है।
 * 14) मैलोरी अब ऐलिस की प्राधिकरण कुकी को अपने ब्राउज़र में रखती है जैसे कि वह उसकी अपनी हो। वह फिर बॉब की साइट पर जाती है और अब ऐलिस के रूप में लॉग इन है।
 * 15) अब जबकि वह अंदर है, मैलोरी वेबसाइट के बिलिंग अनुभाग में जाती है और ऐलिस के भुगतान कार्ड नंबर को देखती है और एक प्रति प्राप्त करती है। फिर वह जाती है और ऐलिस के खाते का पासवर्ड बदल देती है ताकि ऐलिस अब और लॉग इन न कर सके।
 * 16) वह इसे एक कदम आगे ले जाने का फैसला करती है और खुद बॉब को एक समान रूप से तैयार की गई लिंक भेजती है, इस प्रकार बॉब की वेबसाइट पर व्यवस्थापकीय विशेषाधिकार प्राप्त करती है।

इस हमले को कम करने के लिए कई काम किए जा सकते थे:
 * 1) खोज इनपुट HTML स्वच्छताकरण हो सकता था, जिसमें उचित एन्कोडिंग जाँच शामिल होगी।
 * 2) वेब सर्वर को सर्वर-साइड रीडायरेक्ट अमान्य अनुरोधों पर सेट किया जा सकता है।
 * 3) वेब सर्वर एक साथ लॉगिन का पता लगा सकता है और सत्रों को अमान्य कर सकता है।
 * 4) वेब सर्वर दो अलग-अलग आईपी पतों से एक साथ लॉगिन का पता लगा सकता है और सत्रों को अमान्य कर सकता है।
 * 5) वेबसाइट पहले उपयोग किए गए क्रेडिट कार्ड के केवल अंतिम कुछ अंक प्रदर्शित कर सकती है।
 * 6) वेबसाइट को अपनी पंजीकरण जानकारी बदलने से पहले उपयोगकर्ताओं को अपना पासवर्ड फिर से दर्ज करने की आवश्यकता हो सकती है।
 * 7) वेबसाइट सामग्री सुरक्षा नीति के विभिन्न पहलुओं को अधिनियमित कर सकती है।
 * 8) कुकी को सेट करें   जावास्क्रिप्ट से पहुंच को रोकने के लिए ध्वज।

लगातार हमला

 * 1) मैलोरी का बॉब की वेबसाइट पर अकाउंट है।
 * 2) मैलोरी ने देखा कि बॉब की वेबसाइट में एक संग्रहीत XSS भेद्यता है: यदि कोई समाचार अनुभाग में जाता है और एक टिप्पणी पोस्ट करता है, तो साइट जो कुछ भी दर्ज किया गया है उसे प्रदर्शित करेगी। यदि टिप्पणी पाठ में HTML टैग हैं, तो उन्हें वेबपृष्ठ के स्रोत में जोड़ दिया जाएगा; विशेष रूप से, पृष्ठ लोड होने पर कोई भी स्क्रिप्ट टैग चलेंगे।
 * 3) मैलोरी समाचार अनुभाग में एक लेख पढ़ता है और एक टिप्पणी दर्ज करता है:
 * 4) जब ऐलिस (या कोई और) पृष्ठ को टिप्पणी के साथ लोड करता है, तो मैलोरी का स्क्रिप्ट टैग ऐलिस के प्राधिकरण कुकी को चलाता है और चोरी करता है, इसे संग्रह के लिए मैलोरी के गुप्त सर्वर पर भेजता है। # मैलोरी अब ऐलिस के सत्र का अपहरण कर सकती है और ऐलिस का प्रतिरूपण कर सकती है।

बॉब के वेबसाइट सॉफ़्टवेयर को स्क्रिप्ट टैग को हटा देना चाहिए या यह सुनिश्चित करने के लिए कुछ करना चाहिए कि यह काम नहीं कर रहा है; सुरक्षा बग इस तथ्य में शामिल है कि उसने नहीं किया।

प्रासंगिक आउटपुट एन्कोडिंग/स्ट्रिंग इनपुट से बचना
बचने की कई योजनाएँ हैं जिनका उपयोग इस बात पर निर्भर करते हुए किया जा सकता है कि HTML इकाई एन्कोडिंग, जावास्क्रिप्ट एस्केपिंग, CSS एस्केपिंग और प्रतिशत-एन्कोडिंग | URL (या प्रतिशत) एन्कोडिंग सहित HTML दस्तावेज़ में कहाँ रखा जाना चाहिए। अधिकांश वेब एप्लिकेशन जिन्हें समृद्ध डेटा को स्वीकार करने की आवश्यकता नहीं है, वे XSS हमलों के जोखिम को काफी हद तक सीधे तरीके से समाप्त करने के लिए भागने का उपयोग कर सकते हैं।

केवल XML और HTML वर्ण इकाई संदर्भों की सूची पर HTML इकाई एन्कोडिंग निष्पादित करना#XML में पूर्वनिर्धारित इकाइयां हमेशा XSS हमलों के कई रूपों को रोकने के लिए पर्याप्त नहीं होती हैं, सुरक्षा एन्कोडिंग लाइब्रेरी आमतौर पर उपयोग में आसान होती हैं।

कुछ वेब टेम्पलेट सिस्टम अपने द्वारा उत्पादित HTML की संरचना को समझते हैं और स्वचालित रूप से उपयुक्त एन्कोडर चुनते हैं।

अविश्वसनीय HTML इनपुट
को सुरक्षित रूप से मान्य करना

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

कई मान्यताएं पार्सिंग आउट (काली सूची में डाले जाने) पर निर्भर करती हैं जो जोखिम वाले HTML टैग्स पर निर्भर करती हैं जैसे कि निम्नलिखित एक और लोकप्रिय तरीका उपयोगकर्ता इनपुट को छीनना है और ' हालांकि इसे भी बायपास किया जा सकता है क्योंकि पेलोड को अस्पष्टता से छुपाया जा सकता है (यह लिंक देखें के एक चरम उदाहरण के लिए यह)

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

Internet Explorer (संस्करण 6 से), Firefox (संस्करण 2.0.0.5 से), Safari (वेब ​​ब्राउज़र) (संस्करण 4 से), Opera (वेब ​​ब्राउज़र) (संस्करण 9.5 से) और Google Chrome में मौजूद एक और शमन, एक HttpOnly फ़्लैग है जो वेब सर्वर को ऐसी कुकी सेट करने की अनुमति देता है जो क्लाइंट-साइड स्क्रिप्ट के लिए अनुपलब्ध है। लाभकारी होने पर, सुविधा न तो कुकी चोरी को पूरी तरह से रोक सकती है और न ही ब्राउज़र के भीतर हमलों को रोक सकती है।

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

प्रति-डोमेन के आधार पर क्लाइंट-साइड स्क्रिप्ट को अक्षम करने के लिए कुछ ब्राउज़र या ब्राउज़र प्लगइन्स को कॉन्फ़िगर किया जा सकता है। यह दृष्टिकोण सीमित मूल्य का है यदि स्क्रिप्टिंग को डिफ़ॉल्ट रूप से अनुमति दी जाती है, क्योंकि यह खराब साइटों को ब्लॉक करता है, जब उपयोगकर्ता जानता है कि वे खराब हैं, जो बहुत देर हो चुकी है। कार्यक्षमता जो सभी स्क्रिप्टिंग और बाहरी समावेशन को डिफ़ॉल्ट रूप से अवरुद्ध करती है और फिर उपयोगकर्ता को इसे प्रति-डोमेन आधार पर सक्षम करने की अनुमति देती है, अधिक प्रभावी है। इंटरनेट एक्सप्लोरर (संस्करण 4 के बाद से) में अपने तथाकथित सुरक्षा क्षेत्र स्थापित करके यह एक लंबे समय के लिए संभव हो गया है, और ओपेरा में (संस्करण 9 के बाद से) अपनी साइट विशिष्ट वरीयताएँ का उपयोग करते हुए। फ़ायरफ़ॉक्स और अन्य गेको (लेआउट इंजन)-आधारित ब्राउज़रों के लिए एक समाधान ओपन सोर्स NoScript ऐड-ऑन है, जो प्रति-डोमेन आधार पर स्क्रिप्ट को सक्षम करने की क्षमता के अलावा, स्क्रिप्ट के सक्षम होने पर भी कुछ XSS सुरक्षा प्रदान करता है। डिफ़ॉल्ट रूप से सभी वेबसाइटों पर सभी स्क्रिप्ट को अवरुद्ध करने में सबसे महत्वपूर्ण समस्या कार्यक्षमता और जवाबदेही में पर्याप्त कमी है (क्लाइंट-साइड स्क्रिप्टिंग सर्वर-साइड स्क्रिप्टिंग की तुलना में बहुत तेज़ हो सकती है क्योंकि इसे किसी दूरस्थ सर्वर और पृष्ठ या फ़्रेम से कनेक्ट करने की आवश्यकता नहीं होती है) (वर्ल्ड वाइड वेब) को पुनः लोड करने की आवश्यकता नहीं है)। स्क्रिप्ट अवरोधन के साथ एक और समस्या यह है कि कई उपयोगकर्ता इसे समझ नहीं पाते हैं, और यह नहीं जानते कि अपने ब्राउज़रों को ठीक से कैसे सुरक्षित किया जाए। फिर भी एक और दोष यह है कि कई साइटें क्लाइंट-साइड स्क्रिप्टिंग के बिना काम नहीं करती हैं, जिससे उपयोगकर्ता उस साइट के लिए सुरक्षा को अक्षम कर देते हैं और अपने सिस्टम को कमजोरियों के लिए खोल देते हैं। फ़ायरफ़ॉक्स नोस्क्रिप्ट एक्सटेंशन उपयोगकर्ताओं को उसी पृष्ठ पर दूसरों को अस्वीकार करते हुए किसी दिए गए पृष्ठ से स्क्रिप्ट को चुनिंदा रूप से अनुमति देने में सक्षम बनाता है। उदाहरण के लिए, example.com की स्क्रिप्ट्स को अनुमति दी जा सकती है, जबकि Advertisingagency.com की स्क्रिप्ट्स जो उसी पेज पर चलने की कोशिश कर रही हैं, उन्हें अनुमति नहीं दी जा सकती है।

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

यह सुरक्षा बोझ को नीति लेखकों पर स्थानांतरित करता है। में पढ़ता है मेजबान श्वेतसूची आधारित नीतियों की प्रभावकारिता पर संदेह व्यक्त किया है। <ब्लॉककोट>कुल मिलाकर, हम पाते हैं कि 94.68% नीतियां जो स्क्रिप्ट निष्पादन को सीमित करने का प्रयास करती हैं, अप्रभावी हैं, और सीएसपी के साथ 99.34% मेजबान उन नीतियों का उपयोग करते हैं जो एक्सएसएस के खिलाफ कोई लाभ नहीं देते हैं। आधुनिक CSP नीतियां क्रिप्टोग्राफ़िक अस्थायी रूप से उपयोग करने की अनुमति देती हैं नीति को पृष्ठ सामग्री से पूरी तरह से अलग रखने के बजाय HTML दस्तावेज़ में स्क्रिप्ट को चलाने के लिए सुरक्षित के रूप में चिह्नित करना। जब तक भरोसेमंद नॉन्स केवल भरोसेमंद स्क्रिप्ट पर दिखाई देते हैं, ब्राउज़र अविश्वसनीय लेखकों से प्रोग्राम नहीं चलाएगा। कुछ बड़े एप्लिकेशन प्रदाताओं ने गैर-आधारित नीतियों को सफलतापूर्वक परिनियोजित करने की रिपोर्ट दी है।

उभरती रक्षात्मक प्रौद्योगिकियां
ग्राहक की ओर फ्रेमवर्क की लोकप्रियता ने हमलावरों के XSS को बनाने के तरीके को बदल दिया है। "स्क्रिप्ट गैजेट किसी एप्लिकेशन के वैध कोड बेस के भीतर वैध जावास्क्रिप्ट अंश हैं ... हम प्रदर्शित करते हैं कि ये गैजेट लगभग सभी आधुनिक जावास्क्रिप्ट ढांचे में सर्वव्यापी हैं और उत्पादक कोड में स्क्रिप्ट गैजेट के प्रसार को दिखाते हुए एक अनुभवजन्य अध्ययन प्रस्तुत करते हैं। परिणामस्वरूप, हम मानते हैं कि आज लिखे गए वेब अनुप्रयोगों में अधिकांश न्यूनीकरण तकनीकों को बायपास किया जा सकता है।"विश्वसनीय प्रकार वेब एपीआई को यह जांचने के लिए बदलता है कि मान विश्वसनीय के रूप में ट्रेडमार्क (कंप्यूटर सुरक्षा) हैं। जब तक प्रोग्राम केवल भरोसेमंद मूल्यों को ट्रेडमार्क करते हैं, एक हमलावर जो जावास्क्रिप्ट स्ट्रिंग (कंप्यूटर विज्ञान) को नियंत्रित करता है, XSS का कारण नहीं बन सकता है। विश्वसनीय प्रकारों को ब्लू टीम (कंप्यूटर सुरक्षा) द्वारा सूचना सुरक्षा ऑडिट के लिए डिज़ाइन किया गया है।

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

सेमसाइट कुकी पैरामीटर
जब एक कुकी को SameSite=Strict पैरामीटर के साथ सेट किया जाता है, तो इसे सभी क्रॉस-ऑरिजनल अनुरोधों से हटा दिया जाता है। जब SameSite=Lax के साथ सेट किया जाता है, तो इसे सभी गैर-सुरक्षित क्रॉस-ऑरिजिन अनुरोधों से हटा दिया जाता है (अर्थात, GET, OPTIONS, और TRACE के अलावा अन्य अनुरोध जिनमें केवल-पढ़ने के लिए सिमेंटिक होते हैं)। यह सुविधा Google Chrome में संस्करण 63 से और Firefox संस्करण 60 से लागू की गई है।

संबंधित भेद्यता
यूनिवर्सल क्रॉस-साइट स्क्रिप्टिंग (यूएक्सएसएस, या यूनिवर्सल एक्सएसएस) हमले में, ब्राउज़र में ही या ब्राउज़र प्लगइन्स में कमजोरियों का शोषण किया जाता है (अन्य वेबसाइटों में कमजोरियों के बजाय, जैसा कि एक्सएसएस हमलों के मामले में होता है)। कमजोरियों या हमले की तकनीकों के कई वर्ग XSS से संबंधित हैं: क्रॉस-ज़ोन स्क्रिप्टिंग कुछ ब्राउज़रों में ज़ोन अवधारणाओं का शोषण करती है और आमतौर पर अधिक विशेषाधिकार के साथ कोड निष्पादित करती है। HTTP हेडर इंजेक्शन का उपयोग HTTP प्रोटोकॉल स्तर (HTTP प्रतिक्रिया विभाजन जैसे हमलों को सक्षम करने के अलावा) पर बचने की समस्याओं के कारण क्रॉस-साइट स्क्रिप्टिंग स्थितियों को बनाने के लिए किया जा सकता है। क्रॉस-साइट अनुरोध जालसाजी (CSRF/XSRF) XSS के लगभग विपरीत है, इसमें साइट में उपयोगकर्ता के भरोसे का फायदा उठाने के बजाय, हमलावर (और उसका दुर्भावनापूर्ण पृष्ठ) क्लाइंट सॉफ़्टवेयर में साइट के भरोसे का फायदा उठाता है, अनुरोध सबमिट करता है कि साइट का मानना ​​है कि प्रमाणीकृत उपयोगकर्ताओं के सचेत और इरादतन कार्यों का प्रतिनिधित्व करती है। XSS भेद्यताएँ (समान डोमेन पर चल रहे अन्य अनुप्रयोगों में भी) हमलावरों को CSRF रोकथाम प्रयासों को बायपास करने की अनुमति देती हैं। फ़िशिंग#गुप्त रीडायरेक्ट XSS या ओपन रीडायरेक्ट हमलों के प्रति संवेदनशील तीसरे पक्ष के ग्राहकों का लाभ उठाता है। सामान्य फ़िशिंग प्रयासों का पता लगाना आसान हो सकता है, क्योंकि दुर्भावनापूर्ण पृष्ठ का URL आमतौर पर वास्तविक साइट के कुछ अक्षरों से बंद होगा। गुप्त पुनर्निर्देशन के साथ अंतर यह है कि एक हमलावर दुर्भावनापूर्ण लॉगिन पॉप-अप डायलॉग बॉक्स के साथ साइट को दूषित करने के बजाय वास्तविक वेबसाइट का उपयोग कर सकता है। रेफरी नाम = टॉम्सगाइड>

अंत में, SQL इंजेक्शन किसी एप्लिकेशन की डेटाबेस परत में भेद्यता का फायदा उठाता है। जब उपयोगकर्ता इनपुट गलत तरीके से फ़िल्टर किया जाता है, तो किसी भी SQL कथन को एप्लिकेशन द्वारा निष्पादित किया जा सकता है। रेफरी> वेब ब्राउज़र के दिए गए संस्करण को प्रभावित करने वाले विशिष्ट XSS विशिष्ट होते हैं। नतीजतन, ब्राउज़र विक्रेता और उपयोगकर्ता के संस्करण को फिंगरप्रिंट करने के लिए XSS का उपयोग करना संभव है।

यह भी देखें

 * वेब एप्लिकेशन सुरक्षा
 * इंटरनेट सुरक्षा
 * एक्सएमएल बाहरी इकाई
 * ब्राउज़र सुरक्षा
 * Metasploit Project, एक ओपन-सोर्स पैठ परीक्षण उपकरण जिसमें XSS के लिए परीक्षण शामिल हैं
 * w3af, एक ओपन-सोर्स [[वेब अनुप्रयोग सुरक्षा स्कैनर]]
 * DOMpurify, Cure53 की एक मुक्त और खुला स्रोत कोड लाइब्रेरी है, जो वेबसाइटों में XSS कमजोरियों के प्रति संवेदनशीलता को कम करती है।
 * क्रॉस-दस्तावेज़ संदेश
 * सामी (कंप्यूटर कीड़ा)
 * पैरामीटर सत्यापन

इस पेज में लापता आंतरिक लिंक की सूची

 * पहुँच नियंत्रण
 * समान मूल नीति
 * वेब एप्लीकेशन
 * सूचना सुरक्षा
 * दस्तावेज़ वस्तु मॉडल
 * एचटीएमएल स्वच्छता
 * पलायनवादी चरित्र
 * AngularJS
 * प्रतिशत एन्कोडिंग
 * भुगतान कार्ड संख्या
 * सत्र अपहरण
 * कहानियो
 * नेटवर्क एड्रेस ट्रांसलेशन
 * ओपेरा (वेब ​​ब्राउज़र)
 * सफारी (वेब ​​​​ब्राउज़र)
 * छिपकली (लेआउट इंजन)
 * फ़्रेम (वर्ल्ड वाइड वेब)
 * स्थैतिक कार्यक्रम विश्लेषण
 * क्रॉस साइट अनुरोध जालसाजी
 * एसक्यूएल इंजेक्षन

बाहरी कड़ियाँ

 * OWASP: XSS, Testing for XSS, Reviewing Code for XSS
 * XSSed: Database of Websites Vulnerable to Cross-Site Scripting Attacks