वास्तव में अच्छा, खराब UTF-8 उदाहरण परीक्षण डेटा [बंद]


88

इसलिए हमारे पास XSS फ़िल्टरिंग का परीक्षण करने के लिए हमारे पास XSS धोखा शीट है - लेकिन एक उदाहरण सौम्य पृष्ठ के अलावा मुझे यह सुनिश्चित करने के लिए कोई भी बुराई या विकृत परीक्षण डेटा नहीं मिल सकता है कि मेरा UTF-8 कोड मिसबिहेविंग डेटा को संभाल सकता है।

मुझे कुछ अच्छे उह .. खराब डेटा कहां मिलेंगे? या वर्णों का एक कठिन अनुक्रम क्या है?


4
columbia.edu/kermit/utf8.html एक और अच्छा है
Xeoncross


14
ềſģȟ 45 67 ềſģȟ ѣ𝔠1234567890! @ # $% ^ & * () -_ = + [{]} ;: "", </>; ~𝘈Ḇ𝖢𝕯٤ḞԍНǏ𝙅ƘԸⲘ𝙉০Ρ𝗤Ɍ𝓢ȚЦ𝒱Ѡ𝓧ƳȤѧᖯć𝗱ễ𝑓𝙜Ⴙ𝞲𝑗𝒌ļṃʼnо𝞎𝒒ᵲꜱ𝙩ừ𝗏ŵ𝒙𝒚ź1234567890!@#$%^&*()-_=+[{]};:'",<.>/?~ ~ ~ ~ ~ Ḃ ṃ ṃ кιṃդ դ ყ ž1234567890! @ # $% ^ & * () -____ : '', / <।>? ~Ѧ𝙱ƇᗞΣℱԍҤ١𝔍К𝓛𝓜ƝȎ𝚸𝑄Ṛ𝓢ṮṺƲᏔꓫ𝚈𝚭𝜶Ꮟçძ𝑒𝖿𝗀ḧ𝗂𝐣ҝɭḿ𝕟𝐨𝝔𝕢ṛ𝓼тú𝔳ẃ⤬𝝲𝗓1234567890!@#$%^&*()-_=+[{]};:'",<.>/?~ 10 'ṰǓⅤ𝔚 Ⲭ𝑌𝙕𝘢𝕤
एंड्रयू

जवाबों:


98

1
जब आपने इसमें कोई प्रयास नहीं किया - तो वह पृष्ठ वही है जो मैं खोज रहा था। ;)
Xeoncross

75
यह मत भूलो, कि उत्तर जानने के लिए यह जानना अक्सर महत्वपूर्ण होता है कि उत्तर जानना कितना महत्वपूर्ण है।
जोनाथन लेफ़लर

19
मैं आपको चेतावनी देता हूं कि उसका परीक्षण UTF-8 की पुरानी परिभाषा पर आधारित है, जब विमानों के 17 और ऊपर के विमानों को हटाने से पहले 5 और 6 बाइट सीक्वेंस की अनुमति थी। और यह संकेत मिलता है कि कोड पॉइंट्स U + FFFE और U + FFFF जब UTF-8 में अमान्य हैं, प्रति यूनिकोड कंसोर्टियम वे नहीं हैं
साइमन Kissane

34

यह भी देखें कि चीनी पात्रों के साथ एक फ़ाइल कैसे पता करती है कि प्रति चरित्र कितने बाइट्स का उपयोग करना है? - इसमें कोई संदेह नहीं है, अन्य एसओ प्रश्न हैं जो भी मदद करेंगे।

UTF-8 में, आपको निम्न प्रकार के बाइट्स मिलते हैं:

Binary    Hex          Comments
0xxxxxxx  0x00..0x7F   Only byte of a 1-byte character encoding
10xxxxxx  0x80..0xBF   Continuation bytes (1-3 continuation bytes)
110xxxxx  0xC0..0xDF   First byte of a 2-byte character encoding
1110xxxx  0xE0..0xEF   First byte of a 3-byte character encoding
11110xxx  0xF0..0xF4   First byte of a 4-byte character encoding

(अंतिम पंक्ति ऐसा लगता है जैसे इसे 0xF0..0xF7 पढ़ना चाहिए; हालाँकि, यूनिकोड की 21-बिट श्रेणी (U + 0000 - U + 10FFFF) का अर्थ है कि अधिकतम वैध मान 0xF4 है; मान xxF5..0xF7 में नहीं हो सकता है। वैध UTF-8)

यह देखने के लिए कि क्या बाइट्स का एक विशेष क्रम UTF-8 मान्य है, जिसके बारे में आपको सोचने की आवश्यकता है:

  • निरंतर बाइट्स जहां अपेक्षित नहीं हैं
  • गैर-निरंतरता बाइट्स जहां एक निरंतरता बाइट अपेक्षित है, दिखाई दे रही है
  • स्ट्रिंग के अंत में अपूर्ण पात्र ('निरंतर बाइट अपेक्षित' की विविधता)
  • गैर-न्यूनतम अनुक्रम
  • यूटीएफ -16 सरोगेट

मान्य UTF-8 में, बाइट्स 0xF5..0xFF नहीं हो सकता है।

गैर-न्यूनतम अनुक्रम

कुछ पात्रों के लिए कई संभावित प्रतिनिधित्व हैं। उदाहरण के लिए, यूनिकोड वर्ण U + 0000 (ASCII NUL) को इसके द्वारा दर्शाया जा सकता है:

0x00
0xC0 0x80
0xE0 0x80 0x80
0xF0 0x80 0x80 0x80

हालांकि, यूनिकोड मानक स्पष्ट रूप से बताता है कि अंतिम तीन विकल्प स्वीकार्य नहीं हैं क्योंकि वे न्यूनतम नहीं हैं। ऐसा होता है कि बाइट्स 0xC0 और 0xC1 वैध यूटीएफ -8 में कभी नहीं दिखाई दे सकते हैं क्योंकि केवल उन वर्णों को एनकोड किया जा सकता है जो कि 0x00..0x7F में एकल बाइट वर्णों के रूप में न्यूनतम रूप से एन्कोड किए गए हैं।

यूटीएफ -16 सरोगेट

बेसिक मल्टी-लिंगुअल प्लेन (BMP) के भीतर, यूनिकोड मान U + D800 - U + DFFF UTF-16 सरोगेट के लिए आरक्षित हैं और मान्य UTF-8 में एन्कोडेड नहीं दिखाई दे सकते। यदि वे UTF-8 में मान्य थे (जो, मैं जोर देता हूं, वे नहीं हैं), तो सरोगेट को एन्कोड किया जाएगा:

  • U + D800 - 0xED 0xA0 0x80 (सबसे छोटा उच्च सरोगेट)
  • U + DBFF - 0xED 0xAF 0xBF (सबसे बड़ा उच्च सरोगेट)
  • U + DC00 - 0xED 0xB0 0x80 (सबसे छोटा कम किराए)
  • U + DFFF - 0xED 0xBF 0xBF (सबसे बड़ा निम्न सरोगेट)

खराब डेटा

तो, आपके BAD डेटा में इन विभिन्न नुस्खों का उल्लंघन करने वाले नमूने होने चाहिए।

  • प्रारंभिक बाइट मूल्यों में से एक से पहले जारी नहीं बाइट
  • बहु चरित्र प्रारंभिक बाइट्स पर्याप्त निरंतर बाइट्स द्वारा पीछा नहीं किया
  • गैर-न्यूनतम बहु-बाइट वर्ण
  • यूटीएफ -16 सरोगेट
  • अमान्य बाइट्स (0xC0, 0xC1, 0xF5..0xFF)।

ध्यान दें कि एक बाइट-ऑर्डर मार्क (BOM) U + FEFF, उर्फ ​​शून्य-चौड़ाई नो-ब्रेक स्पेस (ZWNBSP), UTF-8 में अनएन्कोडेड नहीं दिखाई दे सकता है - बाइट्स 0xFF और 0xFE को मान्य UTF-8 में अनुमति नहीं है। एक एन्कोडेड ZWNBSP UTF-8 फाइल में 0xEF 0xBB 0xBF के रूप में दिखाई दे सकता है, लेकिन BOM UTF-8 में पूरी तरह से अति विशिष्ट है।


यूनिकोड में कुछ नॉनचैकर भी हैं । U + FFFE और U + FFFF दो ऐसे नॉनचैकर हैं (और प्रत्येक विमान में अंतिम दो कोड पॉइंट हैं, U + 1FFFE, U + 1FFFF, U + 2FFFE, U + 2FFFF, U + 10FFFE, U + 10FFFF अन्य हैं) )। ये आम तौर पर डेटा एक्सचेंज के लिए यूनिकोड डेटा में नहीं दिखना चाहिए, लेकिन निजी उपयोग में दिखाई दे सकता है। यूनिकोड में गैर-अंशधारकों के बजाय जटिल इतिहास सहित बहुत सारे विवरणों के लिए यूनिकोड FAQ लिंक देखें। ( कोरिगेन्डम # 9: क्लेरिफिकेशन अबाउट नॉनचैकर , जो जनवरी 2013 में जारी किया गया था, इसका शीर्षक वही बताता है - जो गैर-पात्रों के अर्थ को स्पष्ट करता है।)


इस महान सूची के लिए धन्यवाद। मैं इनमें से प्रत्येक की अधिक विस्तार से जांच करने की योजना बना रहा हूं।
Xeoncross 2

3
गैर-वर्ण "UTF-8 एन्कोडेड डेटा में प्रकट नहीं होना चाहिए" टिप्पणी भ्रामक है। गैर-वर्ण UTF-8 एन्कोडेड डेटा में प्रकट नहीं करना चाहिए खुला आदान-प्रदान के लिए लक्षित , लेकिन फिर भी UTF-8 एनकोडर / डिकोडर द्वारा स्वीकार किया जाना चाहिए
साइमन Kissane

@SimonKissane: जाहिर है, मैं कई से उलझन में से एक था यथास्थिति पूर्व शुद्धिपत्र # 9 , जो जनवरी 2013 में जारी किया गया था, ऐसा लगता है। गैर-अंशधारकों पर यूनिकोड FAQ का पूरा खंड एक पढ़ने लायक है। जानकारी के लिए धन्यवाद। (मैं यह भी नोट करूंगा कि मेरी टिप्पणी 'चाहिए' जो कि यूनिकोड मानक के अनुसार (लेकिन 'नहीं' कहती है) से सहमत है; अभिप्राय यह है कि वे 'खुले इंटरचेंज' में प्रकट नहीं होने चाहिए लेकिन 'आंतरिक उपयोग' के लिए उपयोग किए जा सकते हैं। '।)
जोनाथन लेफ़लर

1
@ एड्रियनमैयर: यूनिकोड के अध्याय 3 (9.0.0) मानक (पृष्ठ संख्या 125; पीडीएफ फाइल का p54) में तालिका 3.6 देखें । मुझे यकीन नहीं है कि आप किन अन्य स्रोतों से सलाह ले रहे हैं, लेकिन मुझे लगता है कि मैंने जो कहा है, वह उस तालिका में शामिल है।
जोनाथन लेफलर

@JonathanLeffler आप 100% सही हैं, संदर्भ के लिए धन्यवाद।
एड्रियन Maire

17

आप किसी भी पाठ को Homoglyphs के वास्तव में अजीब UTF8 स्ट्रिंग में बदलने के लिए जेफरी बर्गामिनी से इस आसान ऑनलाइन टूल का उपयोग कर सकते हैं ।

एक ठेठ

लोरम इप्सम डोलर सिट एमेट, कंसेटेटुर एडिपिसिंग एलीट, सेड डू आइज्मोड अस्थायी इंसीडियंट यूट लैबर एट डोलोर मैग्ना एलिका।

इस तरह बनें:

Ȋṕëʂǐť ᶙṁšᶙṁ ḍỡḽǭᵳ Ḽơᶉ ȋṕ, ȋṕ ȋṕčḝ ḝłįʈ, ȋṕ ȋṕ ȋṕ ȋṕ ḉñḉīḑȋᵭṵńť ḹẩḇőꝛế é đꝍꞎô ᵯáꞡᶇā ąⱡîɋṹẵ।


6
मुझे लगता है कि यह इसलिए है क्योंकि यह वास्तव में UTF8 का परीक्षण करने में मदद नहीं करता है: आपको मामलों के पूर्ण सेट के करीब कुछ भी नहीं मिलता है, कोई "खराब" मामले नहीं हैं और प्रारूप वास्तव में परीक्षण के लिए उपयोगी नहीं है। यह केवल अजीब चरित्र प्राप्त करने का एक तरीका है।
एड्रियन माइयर

या तुमने कोशिश की? वह जनरेटर मज़े के लिए नहीं है। यह आपको पूर्ण UTF-8 श्रेणी के वर्ण प्रदान करता है, और क्योंकि वे वास्तविक वर्णों के समान अजीब हैं, जिन्हें आप 'देख' सकते हैं कि क्या चर आपको समस्याएं दे रहे हैं। उदाहरण के लिए मैंने पोस्ट किया है वहाँ 6 वर्ण हैं जो मेरे iPhone को बॉक्सिंग प्रश्न चिह्न के रूप में प्रस्तुत करते हैं।
शबुका

4
IMO, यह अद्भुत उपकरण एक स्पष्टीकरण के लिए एक बहुत अच्छा "जोड़ा गया मूल्य" हो सकता है, लेकिन SO में स्वयं के उत्तर के रूप में फिट नहीं होता है (क्योंकि पृष्ठ बंद हो सकता है)। वैसे भी, मैं मानता हूं कि बिना स्पष्टीकरण के -1 बहुत रचनात्मक नहीं है।
एड्रियन मैर

तो यह "अच्छा है, अच्छा utf-8 उदाहरण परीक्षण डेटा" ... एक upvote के रूप में यह संबंधित, IMO
रोंडो


2

मेरे सर के ऊपर से चला गया:

0xff और 0xfe

सिंगल हाई-बिट बाइट्स

कम-बाइट वर्णों का बहु-बाइट प्रतिनिधित्व - प्रारंभिक जांच के दौरान तस्करी का एक अच्छा तरीका है

बाइट-ऑर्डर के निशान - क्या आप उन्हें अनदेखा करने जा रहे हैं?

एनएफसी बनाम एनएफडी

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