हिन्दी

डेवलपर टूल · UUID जनरेटर

crypto.randomUUID() HTTP पेजों पर क्यों विफल रहता है: सुरक्षित संदर्भों की व्याख्या

· यह काम किस प्रकार करता है

uuid क्रिप्टोग्राफी ब्राउज़र-एपिस

तीन मूल दिखाए गए: HTTPS के साथ crypto.randomUUID उपलब्ध, लोकलहोस्ट के साथ crypto.randomUUID उपलब्ध, HTTP स्टेजिंग सर्वर के साथ रैंडमUUID अवरुद्ध
मूल ToolAcre वेक्टर चित्रण

crypto.randomUUID लोकलहोस्ट और HTTPS पर काम करता है, फिर सादे-HTTP स्टेजिंग होस्ट पर गायब हो जाता है। यह पोस्ट उस व्यवहार के पीछे के सुरक्षित-संदर्भ नियम की व्याख्या करती है और जहां यह लागू होता है वहां UUID को सुरक्षित रूप से कैसे उत्पन्न किया जाए।

स्टेजिंग पर टाइप एरर, बाकी सभी जगह ठीक - लक्षण और पर्यावरण का अंतर जो इसका कारण बनता है

एक डेवलपर लोकलहोस्ट पर अपने काम की जाँच करता है:3000 और UUID जनरेटर पूरी तरह से काम करता है। वे http://staging. आंतरिक पर स्टेजिंग के लिए तैनात हैं। उदाहरण। com (सादा HTTP कंपनी LAN पर) और कोड टाइप एरर फेंकता है: crypto.randomUUID कोई फ़ंक्शन नहीं है। https://example. com पर उत्पादन में समान कोड ठीक काम करता है। जब तक वे MDN डॉक्स नहीं पढ़ लेते, तब तक असंगति चौंकाने वाली है: crypto.randomUUID सुरक्षित संदर्भों तक ही सीमित है। एक सुरक्षित संदर्भ या तो HTTPS या लोकलहोस्ट है; LAN पर एक सादा-HTTP मूल ब्राउज़र नियम द्वारा सुरक्षित नहीं है, भले ही नेटवर्क निजी हो। समाधान मैन्युअल बिट संचालन के साथ crypto.getRandomValues का उपयोग करना है, या स्टेजिंग सर्वर को HTTPS में अपग्रेड करना है। संवेदनशील APआई को अनएन्क्रिप्टेड कनेक्शन में लीक होने से रोकने के लिए सुरक्षित-संदर्भ नियम पेश किया गया था।

एक सुरक्षित संदर्भ क्या है - ब्राउज़र नियम जो HTTPS मूल और लोकलहोस्ट के लिए कुछ APआई आरक्षित करता है

सादे HTTP पर एक पेज को नेटवर्क हमलावर द्वारा इंटरसेप्ट किया जा सकता है; ऐसे पेज पर क्रिप्टोग्राफ़िक APआई को उजागर करने से एक हमलावर के लिए समझौता किए गए API का उपयोग करके पहचानकर्ता उत्पन्न करना संभव हो जाएगा। HTTPS पेज और सभी API संचार को एन्क्रिप्ट करता है ताकि नेटवर्क पर कोई हमलावर कोड को रोक या संशोधित न कर सके। लोकलहोस्ट को स्वाभाविक रूप से सुरक्षित माना जाता है क्योंकि यह केवल स्थानीय मशीन पर मौजूद होता है और इसे नेटवर्क पर इंटरसेप्ट नहीं किया जा सकता है। कोई भी अन्य HTTP मूल (एक LAN पता, HTTPS के बिना एक सार्वजनिक डोमेन, एक रिवर्स प्रॉक्सी जो HTTP को अग्रेषित करता है) परिभाषा के अनुसार सुरक्षित नहीं है। Web Crypto API दो कार्यों में विभाजित है: crypto.randomUUID, सुरक्षित संदर्भों तक सीमित, और crypto.getRandomValues, सुरक्षित और गैर-सुरक्षित दोनों संदर्भों में उपलब्ध है। दोनों एक ही ऑपरेटिंग-सिस्टम CSPRNG का उपयोग करते हैं।

Web Crypto के कौन से हिस्से गेटेड हैं - crypto.randomUUID और crypto.subtle को एक सुरक्षित संदर्भ की आवश्यकता होती है जबकि crypto.getRandomValues को नहीं

अंतर यह है कि getRandomValues ​​इस तथ्य को नहीं छिपाता है कि आप क्रिप्टोग्राफी का उपयोग कर रहे हैं; इसका उपयोग करने वाला पेज स्पष्ट रूप से यादृच्छिक बाइट्स का अनुरोध कर रहा होगा। रैंडमUUID फ़ंक्शन एक सुविधा है जो सुरक्षित संदर्भ को भी लागू करती है। यदि आपके एप्लिकेशन को गैर-सुरक्षित पेज पर UUID उत्पन्न करने की आवश्यकता है, तो आपको getRandomValues ​​का उपयोग करना होगा और संस्करण और वेरिएंट बिट्स को मैन्युअल रूप से सेट करना होगा। RFC 9562 बिट संचालन निर्दिष्ट करता है: बाइट 6 को (byte6 और 0x0f) पर सेट करें | संस्करण 4 के लिए 0x40, और बाइट 8 से (byte8 & 0x3f) | RFC वैरिएंट के लिए 0x80। जब रैंडमUUID अनुपलब्ध हो तो ToolAcre लाइब्रेरी फ़ॉलबैक के रूप में बिल्कुल यही करती है। विफलता को पुन: प्रस्तुत करना: सादे HTTP मूल से एक साधारण पेज प्रस्तुत करना जिसे संभावित रूप से भरोसेमंद नहीं माना जाता है। जांचें कि क्या रैंडमUUID उजागर हुआ है, फिर getRandomValues ​​की तुलना करें, जिसे Web Crypto संदर्भ असुरक्षित संदर्भों में अनुमति देता है।

GetRandomValues ​​से एक v4 UUID बनाना - मास्किंग-और-फ़ॉर्मेटिंग फ़ॉलबैक जो आपको रैंडमUUID गायब होने पर CSPRNG पर रखता है

HTTPS पर प्रस्तुत फ़ाइल में समान कोड रैंडमUUID को उजागर कर सकता है। यदि उत्पादन रिपोर्ट करता है "randomUUID एक फ़ंक्शन नहीं है," पहले निरीक्षण करें कि क्या मूल एक सुरक्षित संदर्भ है, फिर ब्राउज़र समर्थन को सत्यापित करें और क्या किसी अन्य स्क्रिप्ट ने क्रिप्टो ऑब्जेक्ट को प्रतिस्थापित किया है। उपाय HTTPS या getRandomValues ​​कार्यान्वयन हो सकता है जो UUID बिट्स को स्पष्ट रूप से सेट करता है। Math.random पॉलीफ़िल समतुल्य फ़ॉलबैक नहीं है: यह क्रिप्टोग्राफ़िक-स्रोत अनुबंध को छोड़ते समय आकार को पुन: उत्पन्न करता है। परीक्षण जो केवल डैश और संस्करण अंकों पर जोर देते हैं, वे उस प्रतिस्थापन को चूक जाएंगे, इसलिए स्रोत पथ के साथ-साथ परिणामी स्ट्रिंग की भी समीक्षा करें।

कार्यान्वित उदाहरण - http:// मूल पर विफलता को पुन: प्रस्तुत करना और समाधान की पुष्टि करना

लेकिन पहचानकर्ता अब पूर्वानुमानित है। एक हमलावर जो आपके सिस्टम से कुछ UUID कैप्चर करता है वह अगले UUID की भविष्यवाणी कर सकता है। यदि कोई एप्लिकेशन गलती से ऐसे पहचानकर्ता को वाहक क्रेडेंशियल के रूप में मानता है, तो पूर्वानुमेयता एक कॉस्मेटिक दोष के बजाय एक प्राधिकरण विफलता बन जाती है। सही रणनीति सर्वर को HTTPS में अपग्रेड करना है (प्रमाणीकरण या संवेदनशील डेटा वाले किसी भी पेज के लिए हमेशा सही कदम) या स्पष्ट बिट संचालन के साथ getRandomValues ​​का उपयोग करना (जो अधिक कोड लेता है लेकिन क्रिप्टोग्राफ़िक रूप से अच्छा है)। सुरक्षित संदर्भ ब्राउज़र द्वारा लागू किया जाता है; आप कॉन्फ़िगरेशन या पर्यावरण चर के साथ इसके आसपास काम नहीं कर सकते। ToolAcre जनरेटर को HTTPS पर तैनात किया गया है, इसलिए crypto.randomUUID उपलब्ध है। जब आप टूल में UUID उत्पन्न करते हैं, तो यह या तो रैंडमUUID (यदि सुरक्षित संदर्भ जांच पास हो जाती है) या बिट ऑपरेशंस के साथ getRandomValues ​​का उपयोग करता है (यदि आप सादे HTTP पर हैं, हालांकि यह दुर्लभ है)।

आपको Math.random के साथ पॉलीफ़िल क्यों नहीं करना चाहिए - आकर्षक शॉर्टकट और इसकी सुरक्षा लागत

कोई भी पथ Math.random पर वापस नहीं आता। यदि आप अपना स्वयं का UUID जनरेटर बना रहे हैं और गैर-सुरक्षित मूल को लक्षित कर रहे हैं, तो getRandomValues ​​का उपयोग करें और बिट संचालन स्वयं करें। रैंडमUUID कार्यों की पुष्टि करने के लिए HTTPS और लोकलहोस्ट दोनों पर परीक्षण करें, फिर यह पुष्टि करने के लिए http:// मूल पर परीक्षण करें कि आपका getRandomValues ​​फ़ॉलबैक सही है। सुरक्षित-संदर्भ प्रतिबंध को समझने से आपको परिनियोजन रणनीतियाँ डिज़ाइन करने में मदद मिलती है। यदि आपका एप्लिकेशन HTTPS (विरासत बुनियादी ढांचे, एम्बेडेड सिस्टम) के बिना एक निजी LAN पर चलना चाहिए, तो getRandomValues ​​फ़ॉलबैक आपके आगे बढ़ने का मार्ग है। यदि आपके पास विकल्प है, तो हर जगह HTTPS पर अपग्रेड करें; लेट्स एनक्रिप्ट के साथ यह मुफ़्त है, और निवेश पूरे एप्लिकेशन में सुरक्षा के रूप में वापस मिलता है। लोकलहोस्ट पर विकास पर कोई प्रतिबंध नहीं है, इसलिए उत्पादन में तैनात करने से पहले लोकलहोस्ट पर और HTTPS स्टेजिंग पर अपने UUID जनरेटर का परीक्षण करें। उत्पादन हमेशा HTTPS होना चाहिए.

इसमें क्या शामिल नहीं है - सर्वर रनटाइम जैसे Node.js और Deno, जो सुरक्षित-संदर्भ नियम के बिना API को उजागर करते हैं

प्रतिबंध कोई बग या उपद्रव नहीं है; यह एक सुरक्षा सुविधा है जो दुर्घटनाओं को रोकती है और आपको एन्क्रिप्शन के बारे में सोचने पर मजबूर करती है। व्यापक पैटर्न यह है कि Web Cryptoग्राफी APआई सुरक्षित संदर्भ द्वारा गेट किए गए हैं। crypto.getRandomValues, क्रिप्टो। जटिल। एन्क्रिप्ट करें, क्रिप्टो करें। जटिल। generateKey, और अन्य सभी संवेदनशील परिचालनों के लिए HTTPS या लोकलहोस्ट की आवश्यकता होती है। चेक को अक्षम करने का कोई अपवाद, कोई ओवरराइड, कोई तरीका नहीं है। एक एकल असुरक्षित पेज आपके उपयोगकर्ताओं के लिए सुरक्षा गारंटी को तोड़ देता है। भले ही आप केवल कुछ पेजों पर क्रिप्टो APआई का उपयोग करने में सावधानी बरतते हों, एक गलती (या एक निर्भरता जिसमें UUID जनरेटर शामिल है) एक अनएन्क्रिप्टेड पेज पर यादृच्छिकता पीढ़ी को लीक कर सकती है। ToolAcre जनरेटर इसे कोड स्तर पर लागू करता है: यदि रैंडमUUID अनुपलब्ध है (गैर-सुरक्षित संदर्भ), तो यह getRandomValues ​​का उपयोग करता है, जो उपलब्ध है लेकिन किसी भी कोड समीक्षक को सचेत करता है कि कुछ असामान्य हो रहा है।

टेकअवे: मूल को ठीक करें, जनरेटर को नहीं - ToolAcre को HTTPS पर परोसा जाता है, इसलिए इसका जनरेटर डिज़ाइन द्वारा सुरक्षित संदर्भ में चलता है

इससे भी बेहतर, यदि सुरक्षित संदर्भ वास्तव में अनुपलब्ध है (ऐसे वातावरण में जहां getRandomValues ​​​​भी उपलब्ध नहीं है, जो दुर्लभ है लेकिन पुराने या एम्बेडेड सिस्टम में संभव है) तो यह एक पहचानकर्ता उत्पन्न करने से इंकार कर देता है। सुरक्षित क्रिप्टोग्राफी APआई का समर्थन करने के लिए मौजूदा सिस्टम को HTTPS पर माइग्रेट करना एक सामान्य परियोजना है। उस स्रोत से प्रारंभ करें जहां UUID उत्पन्न होते हैं (आपका प्रमाणीकरण सर्वर, API बैकएंड, या कुंजी एप्लिकेशन सेवा)। TLS प्रमाणपत्र प्राप्त करें (लेट्स एनक्रिप्ट उन्हें निःशुल्क प्रदान करता है)। अपने वेब सर्वर को डिफ़ॉल्ट रूप से HTTPS परोसने के लिए कॉन्फ़िगर करें और HTTP अनुरोधों को HTTPS पर रीडायरेक्ट करें। यह सुनिश्चित करने के लिए कि सब कुछ काम करता है, अनेक ब्राउज़रों और API क्लाइंट के साथ परीक्षण करें। फिर किसी भी शेष क्रिप्टो APआई के लिए अपने कोड का ऑडिट करें जिसे अनएन्क्रिप्टेड पेजों पर बुलाया जा सकता है और उन्हें ठीक करें। ToolAcre जनरेटर HTTPS मानता है; यदि आप इसका उपयोग कर रहे हैं, तो आप पहले से ही वहां का हिस्सा हैं।