2015-06-20 3 views
9

यह एक XSS स्क्रिप्ट है:हैंडलिंग टैग करता

<svg><script>&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</script></svg> 

<script> टैग के बीच कोड ब्राउज़र द्वारा alert(1) लिए अनुवाद किया जाएगा और मार डाला।

लेकिन अगर मैं <svg> टैग का उपयोग नहीं करता हूं तो कोड को स्क्रिप्ट में अनुवादित नहीं किया जाएगा। क्या कोई मुझे बता सकता है कि ऐसा क्यों होता है? <svg> टैग कैसे काम करता है?

+1

डाउनवॉट्स क्यों? एक अच्छा सवाल लगता है। –

+0

क्रोम में इसकी पुष्टि की, डीओएम को पार्स किए जाने के तरीके के बारे में अजीब प्रभाव की तरह लगता है। इस बात पर संदेह है कि यहां कुछ प्रकार के 'मानक' शामिल हैं। –

+0

@NielsKeurentjes यहां सबकुछ स्पष्ट रूप से एक्सएमएल और एचटीएमएल 5 मानकों द्वारा परिभाषित किया गया है। –

उत्तर

4

स्क्रिप्ट टैग के भीतर character references का उपयोग HTML 5 विनिर्देश के अनुसार HTML पार्सर द्वारा स्पष्ट रूप से अस्वीकृत है।

एचटीएमएल 5 में separate script parsing mode है जो संदर्भ के साथ भिन्न टोकनिसेशन मोडों में से एक है। स्क्रिप्ट पार्सिंग चरित्र संदर्भों की अनुमति नहीं देती है, कुछ अन्य पार्सिंग मोड करते हैं।

एसवीजी एक्सएमएल पर आधारित है जहां नियम बहुत सरल और अधिक सरल हैं। मूल रूप से वर्ण संदर्भों को कहीं भी अनुमति दी जाती है क्योंकि aren't different context sensitive parsing modes

html में

एसवीजी के लिए, HTML विनिर्देश says

एसवीजी नाम स्थान से svg तत्व एम्बेड की गई सामग्री, शब्दों सामग्री में गिर जाता है, और इस विवरण में सामग्री मॉडल के प्रयोजनों के लिए सामग्री श्रेणियों प्रवाह।

दूसरे शब्दों में, सभी एसवीजी पाठ वाक्यांश सामग्री के रूप में पार्स करें। सभी एसवीजी एचटीएमएल 5 पार्सर के लिए एक कस्टम टोकननाइज़ेशन मोड है।

+0

कृपया मेरा नया उत्तर देखें :) जैसा कि कहा गया है, आपका उत्तर अफवाह पूरी तरह से सही है, बस इस विशिष्ट मामले की पूरी व्याख्या नहीं है। –

0

क्योंकि मैं इस व्यवहार के पीछे तर्क पर अन्य उत्तर के उद्धरणों से वास्तव में संतुष्ट नहीं था, इसलिए मैंने इस समस्या को WHATWG mailing list पर बढ़ा दिया, क्योंकि यह कुछ संभव (हालांकि छोटी) सुरक्षा कमियों को प्रस्तुत करता है। इयान हिक्सन (W3C पर एचटीएमएल 5 मानक के मुख्य संपादक) के शब्दों में verbatim:

यह बहुत अच्छा नहीं है, लेकिन यह जानबूझकर है। <svg> और <math> ब्लॉक के भीतर, हम "विदेशी सामग्री" पार्स मोड का उपयोग करें जिसमें पार्स ज्यादा अधिक लीगेसी HTML पार्स से विरासत XML पार्सिंग के समान है: विशेष रूप से

https://html.spec.whatwg.org/#parsing-main-inforeign

ध्यान दें कि <script> के लिए विशेष व्यवहार यहां में टोकनिसर मोड को बदलने में शामिल नहीं है, जैसे गैर-विदेशी सामग्री में।

इसलिए जब रॉबर्ट के जवाब अनिवार्य रूप से एचटीएमएल 5 और एसवीजी सामग्री स्वसंपूर्ण से संबंधित सही उद्धरण का एक संग्रह है, वहाँ 'विदेशी सामग्री' इस व्यवहार की व्याख्या की पार्स करने के बारे में एक विशिष्ट अलग खंड है। और इयान सहमत हैं कि यह वास्तव में एक आदर्श समाधान नहीं है, लेकिन ईमानदारी से मैं एक या तो "अर्ध-एसजीएमएल" और एक्सएमएल पार्सिंग के साथ संगत नहीं हूं।

संबंधित मुद्दे