HTML एंटिटी क्या हैं?
HTML एंटिटी वे एस्केप सीक्वेंस हैं जिनसे पेज उन कैरेक्टर को दिखा पाता है जिन्हें HTML वरना मार्कअप समझता: < के लिए <, & के लिए &, डबल कोट के लिए ", और किसी भी Unicode कैरेक्टर के लिए नामित व संख्यात्मक रेफ़रेंस (©, ©, ©)। अविश्वसनीय टेक्स्ट को पेज में रखने से पहले इस तरह एन्कोड करना ही उसे स्क्रिप्ट बनने से रोकता है।
सुरक्षा नोट: बिना एन्कोड किए पेज तक पहुँचने वाला टेक्स्ट क्रॉस-साइट स्क्रिप्टिंग की जड़ है। आउटपुट पर, उस संदर्भ के अनुसार एन्कोड करें जहाँ वह जाता है (HTML बॉडी, एट्रिब्यूट, JavaScript, URL) — यूज़र इनपुट को "साफ़" करने के लिए डिकोड करना बचाव नहीं है।
<p>भाग 1:Tom & Jerry</p> <input value="भाग 2:Say "hi""> <a href="/search?q=भाग 3:tom%26jerry"> <script>let q = "भाग 4:…";</script> <style>p { color: भाग 5:… }</style>
- 1एलिमेंट कंटेंटयहाँ टूल का आउटपुट काफ़ी है।पास
- 2कोट की गई एट्रिब्यूट वैल्यू“कोट्स एन्कोड करें” चालू रहने तक काफ़ी है; यह डिफ़ॉल्ट रूप से चालू रहता है। बिना कोट वाला एट्रिब्यूट कवर नहीं होता।पास
- 3URL के भीतर वैल्यूइसके साथ percent-encoding भी चाहिए:
tom&jerryसेtom%26jerryबनता है।सावधानी - 4JavaScript के भीतरयहाँ ब्राउज़र एंटिटी डिकोड नहीं करता; इसकी जगह JavaScript एस्केपिंग चाहिए।सावधानी
- 5CSS के भीतरयहाँ ब्राउज़र एंटिटी डिकोड नहीं करता; इसकी जगह CSS एस्केपिंग चाहिए।सावधानी
सरल उदाहरण: हर आउटपुट संदर्भ के लिए एक लाइन। स्लॉट 1 और 2 में इस टूल का डिफ़ॉल्ट सेटिंग वाला आउटपुट है।
HTML एंटिटी एन्कोडर कैसे इस्तेमाल करें
- वह टेक्स्ट पेस्ट करें जो HTML में डाला जाएगा।
- एट्रिब्यूट वैल्यू के लिए कोट्स वाला विकल्प चालू रखें।
- अपने लक्ष्य के अनुसार एंटिटी स्टाइल चुनें।
- एस्केप किया हुआ आउटपुट कॉपी करें।
HTML एंटिटी एन्कोडर की खूबियाँ
- एलिमेंट कंटेंट और उद्धरण-चिह्नों (quotes) में लिखी एट्रिब्यूट वैल्यू में XSS रोकने के लिए & < > " ' एस्केप करता है
- नामित एंटिटी (©), दशमलव (©) या हेक्साडेसिमल (©) स्टाइल
- चाहें तो सारे ग़ैर-ASCII कैरेक्टर, या हर कैरेक्टर एन्कोड करें
- जिन कैरेक्टर का कोई नाम नहीं है, उनके लिए नामित मोड न्यूमेरिक रेफ़रेंस पर लौट आता है
- एंटिटी की गिनती के साथ लाइव आउटपुट
HTML एंटिटी एन्कोडर का उदाहरण
यूज़र इनपुट को सुरक्षित बनाना
इनपुट:
<script>alert("Tom & Jerry")</script>आउटपुट:
<script>alert("Tom & Jerry")</script>HTML एंटिटी एन्कोडर के बारे में अक्सर पूछे जाने वाले सवाल
XSS रोकने के लिए कौन-से कैरेक्टर एस्केप करना ज़रूरी है?
कम से कम &, < और > तथा एट्रिब्यूट वैल्यू के भीतर कोट्स " और '। टूल डिफ़ॉल्ट रूप से पाँचों एन्कोड करता है, जो PHP के htmlspecialchars को ENT_QUOTES के साथ इस्तेमाल करने जैसा ही है।
नामित, दशमलव या हेक्साडेसिमल एंटिटी?
तीनों ब्राउज़र में एक जैसी रेंडर होती हैं। नामित एंटिटी (©) पढ़ने में आसान हैं; न्यूमेरिक (© या ©) XML/XHTML में भी चलती हैं, जहाँ सिर्फ़ पाँच पूर्वनिर्धारित नामों की गारंटी है। जिन कैरेक्टर का नाम नहीं होता, उनके लिए नामित मोड न्यूमेरिक रूप पर लौट आता है।
ग़ैर-ASCII कैरेक्टर कब एन्कोड करने चाहिए?
सिर्फ़ तब जब डॉक्यूमेंट बिना UTF-8 charset के परोसा जा सकता हो, या ऐसे सिस्टम से गुज़रता हो जो यूनिकोड बिगाड़ देते हैं। आधुनिक UTF-8 पेज में अरबी, इमोजी और एक्सेंट सीधे रखे जा सकते हैं।
क्या यूज़र इनपुट सुरक्षित बनाने के लिए HTML एस्केपिंग काफ़ी है?
यह टेक्स्ट को सिर्फ़ एलिमेंट कंटेंट और कोट किए गए एट्रिब्यूट वैल्यू के भीतर सुरक्षित बनाती है, और कहीं नहीं। URL के भीतर रखी वैल्यू को इसके साथ percent-encoding भी चाहिए, और यूज़र से आए लिंक या इमेज के पते को सिर्फ़ http या https तक सीमित करना चाहिए: कोई भी एन्कोडिंग javascript: URL को नहीं रोकती। <script> या <style> एलिमेंट के भीतर ब्राउज़र एंटिटी डिकोड ही नहीं करता, इसलिए वहाँ की वैल्यू को इसकी जगह JavaScript या CSS एस्केपिंग चाहिए।
तकनीकी नोट्स
एन्कोडिंग कैरेक्टर को HTML Living Standard में परिभाषित कैरेक्टर रेफ़रेंस से बदल देती है। U+0080–U+009F रेंज के कंट्रोल कैरेक्टर हमेशा न्यूमेरिक रूप में लिखे जाते हैं, क्योंकि उनका कोई छपने योग्य रूप नहीं होता। अंदरूनी नाम-तालिका रोज़मर्रा में इस्तेमाल होने वाली लगभग 250 एंटिटी कवर करती है; बाकी सब न्यूमेरिक रेफ़रेंस के रूप में दिया जाता है, जिसे हर ब्राउज़र समझता है।
संदर्भ
- HTML Living StandardHTML भाषा, नामित कैरेक्टर रेफ़रेंस (एंटिटी) और ब्राउज़रों के पार्सिंग नियमों सहित।
- Cross Site Scripting (XSS)क्रॉस-साइट स्क्रिप्टिंग क्या है, इसके reflected / stored / DOM वेरिएंट और एन्कोडिंग इसे कैसे रोकती है।