क्रॉस-साइट स्क्रिप्टिंग, जिसे व्यापक रूप से XSS के रूप में जाना जाता है, द्वारा नियोजित सबसे खतरनाक आक्रमण विधियों में से एक है साइबर अपराधी, इसलिए यह महत्वपूर्ण है कि प्रत्येक डेवलपर और सुरक्षा शोधकर्ता यह जानता है कि यह क्या है और कैसे करना है हमलों को रोकें। तो, आप XSS भेद्यता के विरुद्ध कार्रवाई कैसे कर सकते हैं? वेबसाइट द्वारा उपयोगकर्ता से प्राप्त डेटा को दिखाने के लिए आप HTML, JavaScript, या DOM का उपयोग करते हैं। इन तीन अलग-अलग क्षेत्रों में से एक या अधिक एक साथ काम कर सकते हैं।
HTML का उपयोग करके XSS को कैसे रोकें
XSS हमलावरों को दुर्भावनापूर्ण कोड इंजेक्ट करने की अनुमति देता है या वेबपृष्ठों में स्क्रिप्ट, साइट पर आने वाले पहले से न सोचा उपयोगकर्ताओं को लक्षित करना। यह व्यक्तिगत डेटा की चोरी कर सकता है, आगंतुकों को साइबर अपराधी द्वारा स्थापित किसी अन्य साइट पर पुनर्निर्देशित कर सकता है, या अन्यथा वेबपेज के स्वरूप के साथ छेड़छाड़ कर सकता है। लेकिन आप ऐसा होने से रोक सकते हैं; उदाहरण के लिए, उन्हें HTML डालने से रोक कर।
कल्पना कीजिए कि आपके पास गेस्टबुक वाली एक वेबसाइट है। मान लें कि इस अतिथिपुस्तिका का उपयोग करने वाले आपके आगंतुक यहां अपना नाम और संदेश लिख सकते हैं, और उनके संदेश सार्वजनिक रूप से देखे जा सकते हैं। एक हमलावर जो आपकी अतिथिपुस्तिका में XSS परीक्षण करना चाहता है, वह आपके द्वारा लिखे जाने वाले संदेश के लिए आवंटित क्षेत्र का उपयोग करेगा। वह साइबर क्रिमिनल यहां एक जावास्क्रिप्ट कोड चलाएगा। उदाहरण के लिए, एक हमलावर जावास्क्रिप्ट कोड का उपयोग कर सकता है जैसे:
<लिखी हुई कहानी>चेतावनी("एक्सएसएस!")</script>
इसके सफल होने के लिए हमलावर को एक स्क्रिप्ट टैग का उपयोग करना चाहिए। यदि वे नहीं करते हैं, तो जावास्क्रिप्ट कोड कार्य नहीं करेगा। आपको
जावास्क्रिप्ट का उपयोग करके XSS को कैसे रोकें
HTML में तर्क भी है जावास्क्रिप्ट में मान्य. कुछ अनुप्रयोगों में, जावास्क्रिप्ट कोड के साथ उपयोगकर्ता द्वारा वेबसाइट द्वारा प्राप्त डेटा को प्रिंट करना संभव है।
इस कोडिंग पर विचार करें:
<पी आईडी ="छपाई"></पी>
<लिखी हुई कहानी>
दस्तावेज़.getElementById ("परीक्षा".आंतरिक HTML = "";
</script>
कल्पना कीजिए कि एक वेबसाइट उपरोक्त की तरह एक कोड ब्लॉक का उपयोग करती है। डेवलपर ने यहां "प्रिंट" नामक "पी" टैग का इस्तेमाल किया। जैसा कि आप कोड से देख सकते हैं, एक मूल्य "खोज" पैरामीटर से आएगा, और डेवलपर इस आने वाले मूल्य को "पी" टैग में दिखाना चाहता है। इस ऑपरेशन को करने वाला डेवलपर जावास्क्रिप्ट के इनर HTML फीचर का उपयोग करना चाहता था।
अब आइए स्थिति को साइबर हमलावर के दृष्टिकोण से देखें। ऐसी स्थिति में, हमलावर "स्क्रिप्ट" टैग के भीतर एक XSS परीक्षण करेगा। इसके लिए हमलावर को टैग को फिर से शुरू करने की जरूरत नहीं है, क्योंकि एक "स्क्रिप्ट" टैग जो पहले से ही इस्तेमाल किया जा रहा है। हमलावर तब इस तरह एक परीक्षण लिख सकता था:
फ़ाइल नाम.php? खोज = एक" चेतावनी("एक्सएसएस!"); च = "
यह कोड वेबसाइट पर इस प्रकार दिखाई देगा:
दस्तावेज़.getElementById ("परीक्षा".आंतरिक HTML = " ए" चेतावनी("एक्सएसएस!"); च ="";
वह हमला सफल होगा। समस्या को बेहतर ढंग से समझने के लिए, आइए एक और उदाहरण तकनीक की जाँच करें जिसका एक हमलावर उपयोग कर सकता है। हो सकता है कि हैकर ने XSS परीक्षण लागू किया हो जैसे:
फ़ाइल नाम.php? खोज =";</script><ईएम>फातिह</em>
वेबसाइट से देखने पर यह ऐसा दिखेगा:
दस्तावेज़.getElementById ("परीक्षा".आंतरिक HTML = "";</script><ईएम>फातिह</em>";
यह थोड़ा अजीब लग सकता है क्योंकि हमलावर ने यहाँ "/script" जैसी संरचना का उपयोग करके पहले "script" टैग को बंद कर दिया है। और इसलिए, हमलावर अपनी इच्छानुसार किसी भी जावास्क्रिप्ट और HTML कोड को पुनः आरंभ कर सकता है।
यदि आप इन दो अलग-अलग उदाहरणों के बारे में सोचते हैं, तो XSS से सुरक्षा करना बहुत आसान लगता है। सांकेतिक शब्दों में बदलना आवश्यक सावधानी होगी " और ' पहले उदाहरण में आप जो वर्ण देखते हैं। दूसरे उदाहरण में, वर्णों को एनकोड करें < और >.
DOM का उपयोग करके XSS को कैसे रोकें
XSS के इस संस्करण में, वेबसाइट को उपयोगकर्ता से प्राप्त होने वाला डेटा DOM तत्व की संपत्ति में हस्तक्षेप कर सकता है। उदाहरण के लिए, साइट द्वारा उपयोगकर्ता से प्राप्त की जाने वाली रंग जानकारी किसी तालिका की पृष्ठभूमि के रंग या पृष्ठ की संपूर्ण पृष्ठभूमि को प्रभावित कर सकती है। तो उपयोगकर्ता अनजाने में शरीर और टेबल के स्टाइल लेआउट में हस्तक्षेप करता है। इसके लिए निम्न कोड एक अच्छा उदाहरण है:
<बॉडी बीजीकलर ="<?php प्रतिध्वनि $_GET['रंग']; ?>"/>
इसके साथ, वेबसाइट "बॉडी" तत्व की "बीजीकलर" संपत्ति में सीधे उपयोगकर्ता से प्राप्त "रंग" पैरामीटर का उपयोग करती है। तो इस समय हमलावर क्या कर सकता है? वे इस दुर्भावनापूर्ण कोड को निष्पादित कर सकते हैं:
फ़ाइल नाम.php? रंग = लाल" अधिभार ="चेतावनी('एक्सएसएस!')
वेबसाइट से देखने पर ऐसा दिखता है:
<बॉडी बीजीकलर =" लाल" अधिभार ="चेतावनी('एक्सएसएस!') "/>
ऐसा होने से रोकने के लिए, डेवलपर को एनकोड करना होगा " चरित्र।
हालाँकि, ध्यान देने योग्य जावास्क्रिप्ट में एक और महत्वपूर्ण तत्व है। निम्नलिखित कोड स्निपेट इसके लिए एक उदाहरण है:
<एक href="जावास्क्रिप्ट: अलर्ट ('एक्सएसएस!')">
इसका अर्थ है कि कुछ JavaScript कोड को सीधे चलाना संभव है। सबसे अच्छा निवारक उपायों में से एक यह सुनिश्चित करना है कि वेबसाइट यह जांच करे कि उपयोगकर्ताओं से प्राप्त होने वाला डेटा एक वास्तविक URL है या नहीं। सबसे सरल तरीका यह सुनिश्चित करना है कि "HTTP" और जैसे भाव हैं "HTTPS" (HTTP का सुरक्षित संस्करण) संबंध में।
PHP के साथ XSS को रोकने के लिए एक उदाहरण समारोह
आपने किसी ऐप या वेबसाइट को XSS हमलों से बचाने के तरीके के कुछ उदाहरण देखे हैं। आप इस तालिका में PHP के साथ कोड स्निपेट का उपयोग कर सकते हैं:
HTML में एनकोड करें |
htmlspecialchars($str, ENT_COMPAT) |
JavaScript और DOM विशेषता में एनकोड करें |
htmlspecialchars($str, ENT_NOQUOTES) |
यूआरएल जांच |
'/^((((https?)|(\/\/))).*/'; |
ध्यान दें कि ये केवल उदाहरण हैं और आपके द्वारा उपयोग की जा रही सॉफ़्टवेयर भाषा के आधार पर अलग-अलग होंगे।
तुम कर सकते हो PHP के साथ एक वेब एप्लिकेशन बनाएं और उन कोडों को आज़माएं जिन्हें आप ऊपर देख रहे हैं ताकि उन्हें टेक्स्ट आउट किया जा सके। यदि आप सोच रहे हैं कि इन सभी विधियों का उपयोग कैसे किया जाए, तो आप नीचे दिए गए PHP कोड ब्लॉक से कुछ विचार प्राप्त कर सकते हैं, जो तब भी उपयोगी होंगे जब आप किसी भिन्न भाषा का उपयोग कर रहे हों:
<?php
$ डेटा = $ _GET ['डेटा'];समारोहin_attribute($str){
वापस करना htmlविशेषचर ($ str, ENT_COMPAT);
// ENT_COMPAT दोहरे उद्धरण (") वर्ण को एनकोड करेगा।
}
समारोहin_html($str){
$लिंक = '/^(((https?)|(\/\/))).*/';
अगर(! Preg_match ($ लिंक, $ str))
{
वापस करना "/";
}
वापस करना $ str;
}
$ डेटा = in_attribute ($ डेटा);
$ डेटा = in_html ($ डेटा);
$ डेटा = real_url (डेटा);
?>
अपनी वेबसाइट को XSS और अन्य से सुरक्षित रखें
XSS हैकर्स द्वारा इस्तेमाल किया जाने वाला एक लोकप्रिय अटैक वेक्टर है। आमतौर पर, URL में एक पथ मान, आपकी वेबसाइट पर कोई भी फ़ील्ड जहाँ डेटा दर्ज किया जा सकता है (जैसे कि प्रपत्र और टिप्पणियाँ फ़ील्ड), का उपयोग XSS भेद्यता के परीक्षण के लिए किया जा सकता है। लेकिन निश्चित रूप से, साइबर अपराधी किसी साइट पर हमला करने के लिए कई अलग-अलग तरीकों का उपयोग कर सकते हैं, खासकर यदि आपके पास ऐसी वेबसाइट है जिसमें कई उपयोगकर्ता हैं और उनकी जानकारी छुपाते हैं।