प्रतिनिधि इंटरव्यू विषय

आप Unicode नॉर्मलाइज़ेशन और NFC, NFD, NFKC, और NFKD को कैसे समझाते हैं?

सामान्यमध्यम
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

दो यूज़रनेम दिखने में समान हैं लेकिन सिस्टम में उनकी तुलना अलग परिणाम देती है। Unicode नॉर्मलाइज़ेशन समझाइए, NFC, NFD, NFKC और NFKD की तुलना कीजिए, और बताइए कि किसे कब उपयोग किया जाना चाहिए या नहीं किया जाना चाहिए।

प्रॉम्प्ट और संदर्भ

दो स्ट्रिंग्स दिखने में समान हैं लेकिन डेटाबेस यूनीकनेस चेक, सर्च, या फ़ाइलनेम तुलना में अलग परिणाम देती हैं। कंबाइनिंग और प्रीकंपोज़्ड कैरेक्टर्स, चारों फ़ॉर्म्स, इनपुट और स्टोरेज की सीमाओं को समझाइए, और यह भी बताइए कि नॉर्मलाइज़ेशन केस फ़ोल्डिंग, भाषा नियमों, या सिक्योरिटी पॉलिसी का विकल्प क्यों नहीं है।

इंटरव्यूअर क्या जांच रहा है

  • क्या आप कैनोनिकल बनाम कम्पैटिबिलिटी इक्विवेलेंस को समझते हैं।
  • क्या आप बिज़नेस सेमेंटिक्स के आधार पर NFC, NFD, NFKC, या NFKD का चयन करते हैं।
  • क्या आप Unicode वर्ज़न्स, डेटाबेस कोलेशन, इंडेक्स और क्रॉस-सर्विस कंसिस्टेंसी का ध्यान रखते हैं।
  • क्या आप कम्पैटिबिलिटी फ़ोल्डिंग से होने वाले इन्फ़ॉर्मेशन-लॉस के जोखिमों की पहचान कर सकते हैं।

उत्तर देने से पहले स्पष्टीकरण संबंधी प्रश्न

पुष्टि करें कि फ़ील्ड डिस्प्ले टेक्स्ट है, लॉगिन आइडेंटिफ़ायर है, सर्च की है, फ़ाइलनेम है, या कोई सिक्योरिटी-सेंसिटिव आइडेंटिफ़ायर है; भाषा, केस, Unicode वर्ज़न, कोलेशन और क्या ओरिजिनल इनपुट को बनाए रखना आवश्यक है, इसके बारे में पूछें। एक सिस्टम ओरिजिनल को रख सकता है और एक नॉर्मलाइज़्ड कम्पेरिज़न की को स्टोर कर सकता है।

30-सेकंड का उत्तर फ़्रेमवर्क

Unicode एक ही दिखने वाले टेक्स्ट के लिए कई कोड-पॉइंट सीक्वेंसेस की अनुमति देता है। NFC कैनोनिकल डीकंपोज़िशन के बाद कंपोज़िशन करता है; NFD कैनोनिकल डीकंपोज़िशन करता है। NFKC और NFKD कम्पैटिबिलिटी इक्विवेलेंस को भी प्रोसेस करते हैं और विशिष्ट फ़ॉर्मेटिंग या सेमेंटिक अपेक्षाओं वाले कैरेक्टर्स को फ़ोल्ड कर सकते हैं। सामान्य टेक्स्ट के लिए NFC एक आम विकल्प है; कम्पैटिबिलिटी फ़ोल्डिंग के लिए इन्फ़ॉर्मेशन लॉस की स्पष्ट सहनशीलता की आवश्यकता होती है। Unicode वर्ज़न को फ़िक्स करें और नॉर्मलाइज़ेशन को केस फ़ोल्डिंग, स्क्रिप्ट पॉलिसी और सिक्योरिटी चेक्स से अलग रखें।

चरण-दर-चरण गहन विश्लेषण

1. कैनोनिकल इक्विवेलेंस और कंपोज़िशन

एक प्रीकंपोज़्ड कैरेक्टर और बेस कैरेक्टर के साथ कंबाइनिंग मार्क दिखने में एक जैसे हो सकते हैं और कैनोनिकली इक्विवेलेंट हो सकते हैं। NFD उन्हें डीकंपोज़ करता है और NFC स्टैंडर्ड के अनुसार उन्हें कंपोज़ करता है। एक नॉर्मलाइज़ेशन फ़ॉर्म आइडम्पोटेंट (idempotent) होता है: इसे दोबारा लागू करने से स्ट्रिंग में बार-बार बदलाव नहीं होता है।

2. कम्पैटिबिलिटी इक्विवेलेंस की लागत

NFKD कम्पैटिबिलिटी डीकंपोज़िशन करता है और NFKC उसके बाद कंपोज़ करता है। कुछ फ़ॉन्ट वेरिएंट्स, फुल-विड्थ फ़ॉर्म्स, या डेकोरेटिव कैरेक्टर्स बेस रिप्रेजेंटेशन में मैप हो सकते हैं। इसका उपयोग स्पष्ट रूप से व्यापक सर्च या कम्पेरिज़न पॉलिसी के लिए करें, पासवर्ड, लीगल टेक्स्ट, या ऐसे कंटेंट के लिए स्वचालित रूप से नहीं जिसका स्वरूप बनाए रखा जाना चाहिए।

3. स्टोरेज और सिक्योरिटी सीमाएं

ओरिजिनल इनपुट को बनाए रखें और एक वर्ज़न्ड कम्पेरिज़न की जेनरेट करें। यूनीकनेस, टोकनाइज़ेशन, केस फ़ोल्डिंग, और स्क्रिप्ट-कन्फ़्यूज़ेबल चेक्स को अलग से परिभाषित करें। लॉगिन नेम्स, डोमेन्स, या परमिशन आइडेंटिफ़ायर्स के लिए, प्रासंगिक प्रोटोकॉल और सिक्योरिटी प्रोफ़ाइल का पालन करें; केवल NFKC अपने आप में पूर्ण सुरक्षा नहीं है।

उच्च गुणवत्ता वाला नमूना उत्तर

मैं डिस्प्ले और कम्पेरिज़न वैल्यूज़ को अलग रखता हूँ। Unicode प्रीकंपोज़्ड कैरेक्टर्स और कंबाइनिंग सीक्वेंसेस को समान कैनोनिकल टेक्स्ट को दर्शाने की अनुमति देता है, इसलिए कोड-पॉइंट कम्पेरिज़न गलत मिसमैच पैदा कर सकता है। NFD डीकंपोज़ करता है और NFC रीकंपोज़ करता है; NFKD और NFKC कम्पैटिबिलिटी मैपिंग्स भी लागू करते हैं, जो फ़ॉर्मेटिंग इन्फ़ॉर्मेशन को हटा सकती हैं। मैं आम तौर पर सामान्य टेक्स्ट के लिए NFC का उपयोग करूँगा और समर्थित Unicode वर्ज़न को पिन करूँगा। सर्च की NFKC का उपयोग केवल तभी कर सकती है जब वह नुकसान जानबूझकर स्वीकार्य हो, साथ ही केस फ़ोल्डिंग और भाषा नियमों के साथ। ओरिजिनल को स्टोर करें, साथ ही डेटाबेस यूनीकनेस के लिए एक वर्ज़न्ड नॉर्मलाइज़्ड की स्टोर करें। पासवर्ड, सिग्नेचर्स, ऑडिट टेक्स्ट और सिक्योरिटी आइडेंटिफ़ायर्स के लिए, मैं प्रोटोकॉल के बाहर कम्पैटिबिलिटी फ़ोल्डिंग नहीं जोड़ूँगा; मैं निर्दिष्ट आइडेंटिफ़ायर और कन्फ़्यूज़ेबल चेक्स लागू करूँगा। टेस्ट्स कंबाइनिंग ऑर्डर, रिपीटेड नॉर्मलाइज़ेशन, मल्टीलिंगुअल इनपुट, वर्ज़न अपग्रेड्स और कोलेशन अंतरों को कवर करते हैं।

सामान्य गलतियाँ

  • यह कहना कि NFC और NFKC समतुल्य हैं।
  • नॉर्मलाइज़ेशन को केस फ़ोल्डिंग, ट्रांसलिट्रेशन, या एक्सेंट हटाने के समान मानना।
  • हर फ़ील्ड पर NFKC लागू करना और कम्पैटिबिलिटी-कैरेक्टर की जानकारी खो देना।
  • डेटाबेस इंडेक्स और सर्विस वर्ज़न्स की अनदेखी करते हुए केवल एप्लिकेशन में नॉर्मलाइज़ करना।
  • विज़ुअल समानता को सिक्योरिटी इक्विवेलेंस मानना और स्क्रिप्ट कन्फ़्यूज़ेबल्स को अनदेखा करना।

फॉलो-अप प्रश्न और उत्तर

केवल नॉर्मलाइज़्ड स्ट्रिंग ही क्यों स्टोर न करें?

डिस्प्ले, ऑडिट, या लीगल संदर्भों में ओरिजिनल इनपुट की आवश्यकता हो सकती है। दोनों को रखने से यूज़र्स पर पड़ने वाले अपरिवर्तनीय कन्वर्ज़न के प्रभाव से बचा जा सकता है और साथ ही स्थिर यूनीकनेस चेक्स का समर्थन होता है।

क्या Unicode वर्ज़न अपग्रेड यूनीकनेस को तोड़ सकता है?

यह अनअसाइंड कोड पॉइंट्स या नॉर्मलाइज़ेशन डेटा को प्रभावित कर सकता है। नॉर्मलाइज़ेशन वर्ज़न को रिकॉर्ड करें, ऑफ़लाइन कीज़ को रीकंप्यूट करें, कॉलिज़न्स की जांच करें, और फेज़ेज़ में इंडेक्स को माइग्रेट करें।

क्या नॉर्मलाइज़ेशन होमोग्लिफ़ हमलों को रोकता है?

पूरी तरह से नहीं। नॉर्मलाइज़ेशन परिभाषित इक्विवेलेंस संबंधों को कवर करता है; सुरक्षा के लिए स्क्रिप्ट प्रतिबंधों, कन्फ़्यूज़ेबल डिटेक्शन, प्रोटोकॉल के आइडेंटिफ़ायर प्रोफ़ाइल, और समीक्षा की भी आवश्यकता होती है।

सार्वजनिक स्रोत

संबंधित प्रश्न