HTML एस्केपिंग वह प्रक्रिया है जिसमें HTML में विशेष अर्थ रखने वाले characters को उनके entity references से बदला जाता है। पाँच characters जिन्हें अनिवार्य रूप से escape किया जाना चाहिए वे हैं: ampersand (&), less-than (<), greater-than (>), double quote ("), और single quote ('). एस्केपिंग के बिना browser इन characters को displayable text के बजाय markup instructions के रूप में interpret करता है, जिससे page rendering टूट जाती है और injection attacks का रास्ता खुलता है।
HTML विनिर्देश (WHATWG द्वारा maintained) वर्ण संदर्भों के दो रूप परिभाषित करता है: & जैसी नामांकित एंटिटी और & या & जैसी संख्यात्मक एंटिटी। नामांकित एंटिटी स्रोत कोड में पढ़ने में सरल होती हैं। संख्यात्मक एंटिटी (दशमलव या hexadecimal) किसी भी Unicode कोड पॉइंट को represent कर सकती हैं, जो उन वर्णों के लिए उपयोगी है जिनका कोई नामांकित उपनाम नहीं है। दोनों रूप ब्राउज़र में समान आउटपुट उत्पन्न करते हैं।
अनएस्केपिंग (जिसे डीकोडिंग भी कहते हैं) विपरीत क्रिया है: एंटिटी संदर्भों को उनके मूल वर्णों में पुनः परिवर्तित करना। यह तब सामान्य है जब HTML स्रोत से पाठ निकाला जा रहा हो, सामग्री को प्रणालियों के बीच स्थानांतरित किया जा रहा हो, या उन टेम्पलेटों की जाँच की जा रही हो जो एंटिटी को दोहरी बार एन्कोड करते हैं। यह टूल दोनों दिशाओं को ब्राउज़र में संभालता है, इसलिए आप कुछ ही सेकंड में अपनी एस्केपिंग तर्क की जाँच कर सकते हैं या HTML-युक्त स्रोत से सादा पाठ प्राप्त कर सकते हैं।
HTML Escape टूल का उपयोग क्यों करें?
बड़े पाठ खंडों में ऐंगल ब्रैकेट और ऐम्परसेंड को manually बदलना थकाऊ और त्रुटिपूर्ण है। एक समर्पित टूल बिना किसी इंस्टॉलेशन के एक चरण में आपके इनपुट को कनवर्ट करता है।
⚡
तत्काल रूपांतरण
पाठ या HTML चिपकाएँ और तुरंत एस्केप या अनएस्केप किया हुआ आउटपुट प्राप्त करें। सर्वर राउंड-ट्रिप की कोई प्रतीक्षा नहीं क्योंकि सारी processing JavaScript में locally होती है।
🔒
गोपनीयता-केंद्रित प्रसंस्करण
आपका इनपुट ब्राउज़र से बाहर नहीं जाता। कुछ भी सर्वर को नहीं भेजा जाता और न कहीं संग्रहीत होता है, इसलिए आप सुरक्षित रूप से उस मार्कअप को एस्केप कर सकते हैं जिसमें क्रेडेंशियल, API कुंजियाँ, या आंतरिक कोड हो।
📋
कोई खाता या सेटअप नहीं
पृष्ठ खोलें और चिपकाना शुरू करें। कोई लॉगिन नहीं, कोई ईमेल पंजीकरण नहीं, और इंस्टॉल करने के लिए कोई सॉफ़्टवेयर नहीं। आधुनिक ब्राउज़र वाले किसी भी उपकरण पर कार्य करता है।
🌐
पूर्ण एंटिटी कवरेज
पाँच अनिवार्य HTML विशेष वर्णों के साथ-साथ संख्यात्मक एंटिटी (दशमलव और hexadecimal) को संभालता है। राउंड-ट्रिप रूपांतरण का समर्थन करता है: एस्केप करने के बाद अनएस्केप करने पर मूल स्ट्रिंग वापस मिलती है।
HTML Escape के उपयोग के मामले
फ्रंटएंड डेवलपर: उपयोगकर्ता इनपुट प्रदर्शित करना
किसी पृष्ठ में उपयोगकर्ता द्वारा प्रस्तुत पाठ प्रस्तुत करते समय, ब्राउज़र को उसे HTML टैग के रूप में interpret करने से रोकने के लिए पहले उसे एस्केप करें। यह किसी भी टेम्पलेट में संग्रहीत XSS के विरुद्ध प्राथमिक सुरक्षा है जो कच्ची स्ट्रिंग आउटपुट करता है।
बैकएंड इंजीनियर: HTML रिस्पॉन्स उत्पन्न करना
सर्वर-साइड कोड जो HTML में स्ट्रिंग जोड़ता है उसे सम्मिलन से पहले गतिशील मानों को एस्केप करना होगा। नेस्टेड उद्धरण जैसे सीमांत मामलों के लिए यह टूल उपयोग करें और सत्यापित करें कि आपका एस्केपिंग फ़ंक्शन सही आउटपुट उत्पन्न करता है।
DevOps: HTML में कॉन्फ़िगरेशन एम्बेड करना
किसी HTML पृष्ठ में इनलाइन JSON या शेल आदेश (उदाहरण के लिए, script टैग या data एट्रिब्यूट में) एस्केपिंग की आवश्यकता रखते हैं। सत्यापित करें कि आपके कॉन्फ़िग खंडों में ऐंगल ब्रैकेट और ऐम्परसेंड सही ढंग से एन्कोड हैं।
QA इंजीनियर: XSS वेक्टर की जाँच करना
सामान्य XSS पेलोड इस टूल में चिपकाएँ और पुष्टि करें कि आपके अनुप्रयोग का आउटपुट सही ढंग से एस्केप किए गए संस्करण से मेल खाता है। एस्केप किए गए आउटपुट की अपने अनुप्रयोग के उत्पादन से वर्ण-दर-वर्ण तुलना करें।
तकनीकी लेखक: दस्तावेज़ीकरण में कोड नमूने
HTML-आधारित दस्तावेज़ीकरण (Jekyll, Hugo, कस्टम CMS) में कोड खंड प्रकाशित करने के लिए जेनेरिक प्रकार वाक्यरचना और टेम्पलेट स्थानधारकों के लिए ऐंगल ब्रैकेट को एस्केप करना आवश्यक है। अपना कोड नमूना चिपकाएँ और प्रत्येक विशेष वर्ण तुरंत एन्कोड हो जाता है।
छात्र: HTML एंटिटी सीखना
कोई भी वर्ण टाइप करें या चिपकाएँ और उसके नामांकित तथा संख्यात्मक एंटिटी रूप देखें। गैर-रिक्त स्थान, em डैश और Unicode प्रतीकों जैसे सीमांत मामलों के साथ प्रयोग करें और समझें कि HTML वर्ण एन्कोडिंग कैसे कार्य करती है।
HTML एंटिटी संदर्भ तालिका
नीचे दी गई तालिका सामान्यतः उपयोग की जाने वाली HTML एंटिटी सूचीबद्ध करती है। पाँच विशेष वर्णों (& < > " ') को HTML सामग्री और एट्रिब्यूट मानों में सदा एस्केप किया जाना चाहिए। अन्य एंटिटी वैकल्पिक हैं परंतु उन वर्णों के लिए उपयोगी हैं जो टाइप करने में कठिन या स्रोत कोड में अस्पष्ट हैं।
दोनों क्रियाएँ एक-दूसरे की विपरीत हैं। गलत दिशा चुनने से दोहरी-एन्कोडेड या असुरक्षित आउटपुट उत्पन्न होता है।
Escape (एन्कोड)
HTML में अविश्वसनीय या गतिशील पाठ सम्मिलित करते समय उपयोग करें। < को < में बदलता है ताकि ब्राउज़र वर्ण प्रदर्शित करे न कि टैग प्रारंभ करे। उपयोगकर्ता इनपुट, लॉग प्रविष्टियाँ, या किसी भी स्ट्रिंग को प्रस्तुत करने से पहले लागू करें जिसमें मार्कअप हो सकता है।
Unescape (डीकोड)
HTML स्रोत से सादा पाठ निकालते समय उपयोग करें। < को वापस < में बदलता है। CMS से सामग्री स्थानांतरित करते समय, स्क्रेप किए गए HTML को पार्स करते समय, या &amp; जैसी दोहरी-एन्कोडेड स्ट्रिंग ठीक करते समय लागू करें जो वर्णों के बजाय एंटिटी नाम प्रदर्शित करती हैं।
कोड उदाहरण
नीचे चार भाषाओं में HTML एस्केपिंग और अनएस्केपिंग के कार्यशील उदाहरण दिए गए हैं। प्रत्येक खंड दोनों दिशाओं को संभालता है और नेस्टेड उद्धरण तथा संख्यात्मक एंटिटी जैसे सीमांत मामलों को दर्शाता है।
HTML एस्केपिंग उन वर्णों को बदलती है जो HTML में विशेष हैं (< > & " ') एंटिटी संदर्भों जैसे < से ताकि वे पाठ के रूप में प्रदर्शित हों। URL एन्कोडिंग (प्रतिशत-एन्कोडिंग) URL में असुरक्षित वर्णों को %XX hexadecimal अनुक्रमों से बदलती है। ये अलग-अलग संदर्भों की सुरक्षा करते हैं: HTML एस्केपिंग मार्कअप इंजेक्शन रोकती है, जबकि URL एन्कोडिंग वैध क्वेरी स्ट्रिंग और पथ खंड सुनिश्चित करती है।
HTML में किन वर्णों को एस्केप किया जाना चाहिए?
पाँच वर्ण जिन्हें सदा एस्केप किया जाना चाहिए: & (ऐम्परसेंड), < (less-than), > (greater-than), " (एट्रिब्यूट के अंदर दोहरा उद्धरण), और ' (एट्रिब्यूट के अंदर एकल उद्धरण)। इनमें से किसी को भी एस्केप न करने पर प्रस्तुतिकरण टूट सकता है या क्रॉस-साइट स्क्रिप्टिंग की भेद्यता उत्पन्न हो सकती है।
क्या ' HTML5 में वैध है?
हाँ। ' नामांकित एंटिटी HTML5 विनिर्देश में परिभाषित है और सभी आधुनिक ब्राउज़रों द्वारा समर्थित है। यह HTML 4 का हिस्सा नहीं था जो केवल &, <, >, और " को पहचानता था। यदि आपको बहुत पुराने HTML 4 पार्सर का समर्थन करना है तो संख्यात्मक रूप ' का उपयोग करें।
&amp; जैसी दोहरी-एन्कोडेड HTML एंटिटी को कैसे ठीक करें?
दोहरी एन्कोडिंग तब होती है जब पहले से एस्केप की गई स्ट्रिंग दूसरी बार एस्केपिंग फ़ंक्शन से गुजरती है। समाधान यह है कि आउटपुट स्थिर होने तक अनएस्केप करते रहें। दोहरी-एन्कोडेड स्ट्रिंग को इस टूल में unescape मोड में चिपकाएँ, फिर यदि & संदर्भ शेष हैं तो पुनः चलाएँ। दोहरी एन्कोडिंग रोकने के लिए, एस्केपिंग लागू करने से पहले जाँचें कि इनपुट पहले से एस्केप है या नहीं।
क्या मैं JavaScript स्ट्रिंग के अंदर HTML एंटिटी उपयोग कर सकता हूँ?
HTML एंटिटी की व्याख्या HTML पार्सर द्वारा की जाती है, JavaScript इंजन द्वारा नहीं। script ब्लॉक के अंदर, कोड HTML पार्सर द्वारा पृष्ठ संसाधित करने के बाद चलता है, इसलिए script ब्लॉक में < JavaScript के देखने से पहले < बन जाता है। इनलाइन इवेंट हैंडलर (onclick आदि) के लिए, एट्रिब्यूट मान पहले HTML-डीकोड होता है, फिर JavaScript के रूप में निष्पादित होता है। बाहरी .js फ़ाइलों में, एंटिटी का कोई विशेष अर्थ नहीं होता और उन्हें शाब्दिक पाठ माना जाता है।
PHP में htmlspecialchars और htmlentities में क्या अंतर है?
htmlspecialchars() केवल पाँच विशेष वर्णों (& < > " ') को एस्केप करता है जो HTML संरचना को प्रभावित करते हैं। htmlentities() उन पाँच के साथ-साथ प्रत्येक उस वर्ण को एस्केप करता है जिसका नामांकित HTML एंटिटी है, जैसे कॉपीराइट चिह्न और उच्चारण युक्त अक्षर। सुरक्षा उद्देश्यों के लिए, ENT_QUOTES के साथ htmlspecialchars() पर्याप्त है। htmlentities() तब उपयोगी है जब आपको उन प्रणालियों के लिए ASCII-safe आउटपुट चाहिए जो UTF-8 संभाल नहीं सकतीं।
क्या HTML एस्केपिंग XSS रोकने के लिए पर्याप्त है?
HTML एस्केपिंग सबसे सामान्य स्थिति में XSS रोकती है: HTML तत्व सामग्री या एट्रिब्यूट मानों में अविश्वसनीय पाठ सम्मिलित करना। यह अन्य इंजेक्शन संदर्भों की सुरक्षा नहीं करती। script ब्लॉक में उपयोगकर्ता डेटा सम्मिलित करने के लिए JavaScript स्ट्रिंग एस्केपिंग आवश्यक है। style एट्रिब्यूट में सम्मिलन के लिए CSS एस्केपिंग चाहिए। URL एट्रिब्यूट (href, src) में सम्मिलन के लिए URL सत्यापन और एन्कोडिंग दोनों आवश्यक हैं। एक संपूर्ण XSS सुरक्षा प्रत्येक सम्मिलन बिंदु पर संदर्भ-विशिष्ट एस्केपिंग लागू करती है।