HTML में किन वर्णों से बचने की आवश्यकता है?


251

क्या वे XML के समान हैं, शायद प्लस वन (  )?

मुझे HTML भागने के पात्रों की कुछ विशाल सूची मिली है, लेकिन मुझे नहीं लगता कि उन्हें बचना चाहिए । मैं जानना चाहता हूं कि क्या बचने की जरूरत है।

जवाबों:


318

यदि आप अपने दस्तावेज़ में उस स्थान पर पाठ सामग्री सम्मिलित कर रहे हैं जहाँ पाठ सामग्री 1 अपेक्षित है , तो आपको आमतौर पर केवल उन्हीं वर्णों से बचने की आवश्यकता होती है जैसे आप XML में होंगे । एक तत्व के अंदर, इसमें केवल इकाई एस्केप एम्परसेंड शामिल है &और तत्व कम से कम और अधिक से अधिक संकेत देता है < >:

& becomes &amp;
< becomes &lt;
> becomes &gt;

विशेषता मानों के अंदर आपको अपने द्वारा उपयोग किए जा रहे उद्धरण वर्ण से भी बचना चाहिए:

" becomes &quot;
' becomes &#39;

कुछ मामलों में इन पात्रों में से कुछ को छोड़ना छोड़ना सुरक्षित हो सकता है, लेकिन मैं आपको गलती करने की संभावना को कम करने के लिए सभी मामलों में सभी पांचों से बचने के लिए प्रोत्साहित करता हूं।

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

सामान्य तौर पर, आपको रिक्त स्थान से बचना चाहिए &nbsp;&nbsp;एक सामान्य स्थान नहीं है, यह एक गैर-तोड़ने वाला स्थान है । आप दो शब्दों के बीच एक लाइन ब्रेक को रोकने के लिए, या इसके बिना अतिरिक्त स्थान को सम्मिलित करने के लिए स्वचालित रूप से ढह जाने से रोकने के लिए सामान्य रिक्त स्थान के बजाय इनका उपयोग कर सकते हैं, लेकिन यह आमतौर पर एक दुर्लभ मामला है। इसे तब तक न करें जब तक आपके पास एक डिज़ाइन की कमी न हो जो इसकी आवश्यकता है।


1 "एक स्थान जहां पाठ सामग्री अपेक्षित है", मेरा मतलब है कि एक तत्व या उद्धृत विशेषता मूल्य के अंदर जहां सामान्य पार्सिंग नियम लागू होते हैं। उदाहरण के लिए: <p>HERE</p>या <p title="HERE">...</p>। मैंने ऊपर जो लिखा है वह उस सामग्री पर लागू नहीं होता है जिसमें विशेष पार्सिंग नियम या अर्थ होते हैं, जैसे स्क्रिप्ट या स्टाइल टैग के अंदर, या एक तत्व या विशेषता नाम के रूप में। उदाहरण के लिए: <NOT-HERE>...</NOT-HERE>, <script>NOT-HERE</script>, <style>NOT-HERE</script>, या <p NOT-HERE="...">...</p>

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

यदि आपको आवश्यक है, तो कृपया कुछ ऐसी चिंताओं को समझने में मदद करने के लिए ओपन वेब एप्लिकेशन सिक्योरिटी प्रोजेक्ट के XSS प्रिवेंशन रूल्स को पढ़ें ।


2
कुछ HTML विशेषता मानों का विशेष अर्थ (JS / CSS) भी हो सकता है। इसलिए यह भी इन पर लागू नहीं होता है, उदाहरण के लिए: <p onclick="NOT-HERE">...</p>और <p style="NOT-HERE">...</p>
गीकले

21

यह संदर्भ पर निर्भर करता है। HTML में कुछ संभावित संदर्भ:

  • दस्तावेज़ निकाय
  • आम विशेषताओं के अंदर
  • स्क्रिप्ट टैग के अंदर
  • अंदर शैली टैग
  • कई और!

देखें OWASP की क्रॉस साइट स्क्रिप्टिंग प्रिवेंशन चीट शीट , विशेष रूप से " व्हाई कैन आई कांट जस्ट एचटीएमएल एंटिटी एनकोडेड अनट्रेड्ड डेटा? " और " एक्सएसएस प्रिवेंशन रूल्स " सेक्शन। हालांकि, पूरे दस्तावेज़ को पढ़ना सबसे अच्छा है।


9

मूल रूप से, तीन मुख्य पात्र हैं जो हमेशा आपके HTML और XML फ़ाइलों में बच जाते हैं, इसलिए वे बाकी मार्कअप के साथ बातचीत नहीं करते हैं, इसलिए जैसा कि आप शायद उम्मीद करते हैं, उनमें से दो वाक्यविन्यास रैपर हैं, जो < >, वे नीचे सूचीबद्ध हैं:

 1)  &lt; (<)
    
 2)  &gt; (>)
    
 3)  &amp; (&)

इसके अलावा हम दोहरे उद्धरण (") के रूप में" और एकल बोली (') के रूप में & apos का उपयोग कर सकते हैं

में गतिशील सामग्री रखने से भी बचें <script>और <style>ये नियमों के लिए उनके लिए लागू नहीं कर रहे हैं। उदाहरण के लिए, यदि आपको JSON को एक में शामिल करना है, तो <x \ c से प्रतिस्थापित करें, U + 2028 वर्ण के साथ \ u2028, और U + 2029 के साथ JSON क्रमांकन के बाद U + 2029।)

HTML एस्केप वर्ण: पूर्ण सूची: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

तो आपको भागने की ज़रूरत है <या, और उसके बाद कुछ भी हो सकता है जो एक चरित्र संदर्भ शुरू कर सकता है। इसके अलावा ampersands पर नियम उद्धृत विशेषताओं के लिए एकमात्र ऐसा नियम है, क्योंकि मिलान उद्धरण चिह्न केवल एक चीज है जो एक को समाप्त कर देगा। लेकिन अगर आप वहां विशेषता मान को समाप्त नहीं करना चाहते हैं, तो उद्धरण चिह्न से बच जाएं।

UTF-8 में बदलने का अर्थ है अपनी फ़ाइल को फिर से सहेजना:

अपने पृष्ठ के लिए UTF-8 के वर्ण एन्कोडिंग का उपयोग करने का अर्थ है कि आप अधिकांश पलायन की आवश्यकता से बच सकते हैं और केवल पात्रों के साथ काम कर सकते हैं। ध्यान दें, हालांकि, अपने दस्तावेज़ के एन्कोडिंग को बदलने के लिए, पेज के शीर्ष पर या सर्वर पर एन्कोडिंग घोषणा को बदलना केवल पर्याप्त नहीं है। आपको उस एन्कोडिंग में अपने दस्तावेज़ को फिर से सहेजना होगा। यह समझने में मदद के लिए कि आपके आवेदन के साथ वेब संलेखन अनुप्रयोगों में सेटिंग एन्कोडिंग को कैसे पढ़ें।

अदृश्य या अस्पष्ट वर्ण:

भागने के लिए एक विशेष रूप से उपयोगी भूमिका उन पात्रों का प्रतिनिधित्व करती है जो प्रस्तुति में अदृश्य या अस्पष्ट हैं।

एक उदाहरण यूनिकोड वर्ण U + 200F RIGHT-TO-LEFT MARK होगा। इस चरित्र का उपयोग द्विदिश पाठ (जैसे अरबी या हिब्रू लिपियों का उपयोग करते समय) में दिशात्मकता को स्पष्ट करने के लिए किया जा सकता है। इसका कोई ग्राफिक रूप नहीं है, हालांकि, इसलिए यह देखना मुश्किल है कि ये पात्र पाठ में कहां हैं, और यदि वे खो गए हैं या भूल गए हैं तो वे बाद में संपादन के दौरान अप्रत्याशित परिणाम पैदा कर सकते हैं। इसके बजाय (या इसके संख्यात्मक वर्ण संदर्भ समतुल्य) का उपयोग करना इन पात्रों को स्पॉट करना बहुत आसान बनाता है।

अस्पष्ट चरित्र का एक उदाहरण U + 00A0 NO-BREAK SPACE है। इस प्रकार का स्थान लाइन ब्रेकिंग को रोकता है, लेकिन यह किसी अन्य स्थान की तरह ही दिखता है, जब इसे एक पात्र के रूप में उपयोग किया जाता है। उपयोग करने से यह स्पष्ट हो जाता है कि पाठ में ऐसे स्थान कहाँ दिखाई देते हैं।


3

सटीक उत्तर संदर्भ पर निर्भर करता है। सामान्य तौर पर, ये वर्ण मौजूद नहीं होने चाहिए ( HTML 5.2 .23.2.4.2.5 ):

पाठ नोड्स और विशेषता मान में यूनिकोड वर्ण शामिल होना चाहिए, इसमें U + 0000 वर्ण नहीं होने चाहिए, इसमें स्थायी रूप से अपरिभाषित यूनिकोड वर्ण (नॉनचैकर) नहीं होने चाहिए, और इसमें अंतरिक्ष वर्णों के अलावा नियंत्रण वर्ण शामिल नहीं होने चाहिए। इस विनिर्देशन में पाठ नोड्स के सटीक मान पर अतिरिक्त बाधाएं और उनके सटीक संदर्भ के आधार पर विशेषता मान शामिल हैं।

HTML में तत्वों के लिए, पाठ सामग्री मॉडल की कमी भी तत्व के प्रकार पर निर्भर करती है। उदाहरण के लिए, एक textarea तत्व के अंदर एक "<" HTML में बच निकलने की आवश्यकता नहीं है क्योंकि textarea एक अपरिहार्य कच्चा पाठ तत्व है।

ये प्रतिबंध पूरे विनिर्देशन में बिखरे हुए हैं। जैसे, गुण मान ( §8.1.2.3 ) में एक अस्पष्ट एम्परसेंड नहीं होना चाहिए और या तो (i) खाली होना चाहिए , (ii) एकल उद्धरणों के भीतर (और इस प्रकार U + 0027 APOSTROPHE चरित्र नहीं होना चाहिए '), (iii) दोहरे उद्धरण चिह्नों के भीतर ( निम्न प्रतिबंधों के साथ U + 0022 उद्धरण मार्क वर्ण "), या (iv) शामिल नहीं होना चाहिए :

... किसी भी शाब्दिक स्थान वर्ण, किसी भी U + 0022 उद्धरण चिह्न वर्ण ("), U + 0027 APOSTROPHE वर्ण ('), U + 003D संदर्भ चिह्न वर्ण (=), U 003C LESS-THAN SIGN वर्ण () शामिल नहीं होने चाहिए <), U + 003E GREATER-THAN SIGN अक्षर (>), या U + 0060 GRAVE ACCENT अक्षर (`), और खाली स्ट्रिंग नहीं होनी चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.