प्रॉम्प्ट और संदर्भ
एक SaaS उत्पाद टिप्पणियों (comments), नॉलेज बेस और टेम्प्लेट में उपयोगकर्ता द्वारा बनाए गए रिच टेक्स्ट को जोड़ रहा है। कस्टम फ़िल्टरिंग नियमों को कम करने के लिए टीम ब्राउज़र-नेटिव HTML Sanitizer API चाहती है, लेकिन यह API कुछ प्रमुख ब्राउज़रों में अनुपलब्ध है। निर्णय लें कि इसे अपनाना चाहिए या नहीं और सुरक्षा, अनुभव, अनुकूलता और परिचालन से जुड़े ट्रेड-ऑफ़ की व्याख्या करें।
साक्षात्कारकर्ता क्या मूल्यांकन करता है
- क्या आप पहले खतरे का मॉडल (threat model), अनुमत सामग्री और सर्वर ट्रस्ट सीमा को परिभाषित करते हैं।
- क्या आप
setHTML(), कस्टम Sanitizer कॉन्फ़िगरेशन,setHTMLUnsafe()और Trusted Types में अंतर स्पष्ट करते हैं। - क्या ब्राउज़र कवरेज, फ़ॉलबैक कार्यान्वयन, सामग्री स्थिरता और माइग्रेशन लागत को परिमाणित (quantify) किया गया है।
- क्या चरणबद्ध मेट्रिक्स XSS जोखिम, संपादन सफलता, प्रदर्शन और रोलबैक तत्परता को मान्य करते हैं।
स्पष्टीकरण के लिए पूछे जाने वाले प्रश्न
पुष्टि करें कि क्या रिच टेक्स्ट के लिए लिंक, चित्र, टेबल, एम्बेड, स्टाइल या कस्टम एट्रिब्यूट की आवश्यकता है; क्या सामग्री सर्वर-साइड रेंडर होती है, ईमेल पर निर्यात की जाती है, खोज के लिए अनुक्रमित (indexed) की जाती है, या अन्य क्लाइंट पर पुन: उपयोग की जाती है। समर्थित ब्राउज़रों, मौजूदा सैनिटाइज़र, अनुपालन आवश्यकताओं, अटैक सरफ़ेस और स्वीकार्य फ़ीचर डिग्रेडेशन की पुष्टि करें।
30-सेकंड का उत्तर
मैं मौजूदा सैनिटाइज़र को एक साथ बदलने के बजाय नेटिव-फ़र्स्ट, सर्वर-सत्यापित, क्षमता-स्तरीय फ़ॉलबैक का उपयोग करूँगा। नेटिव setHTML() एक सुरक्षित सैनिटाइजेशन पथ का अनुसरण करता है, लेकिन कवरेज सीमित है, इसलिए असमर्थित ब्राउज़र एक ऑडिट की गई समकक्ष नीति का उपयोग करते हैं। टिप्पणियों जैसी कम-जटिलता वाली सतह से शुरुआत करें और खतरनाक-पेलोड ब्लॉकिंग, सामग्री निष्ठा (content fidelity), संपादन सफलता, विलंबता (latency) और ब्राउज़र वितरण को मापें। सर्वर अभी भी आउटपुट सीमाओं पर सैनिटाइज़ और एनकोड करता है; Trusted Types इंजेक्शन सिंक के चारों ओर एक बाधा जोड़ता है।
चरण-दर-चरण गहन विश्लेषण
1. उपयोगकर्ता मूल्य और खतरे के मॉडल को परिभाषित करें
उपयोगकर्ता मूल्य विश्वसनीय स्वरूपित सामग्री है; प्राथमिक जोखिम अविश्वसनीय HTML को DOM या किसी अन्य रेंडरिंग सिंक में भेजना है। यह तय करने से पहले कि कौन सी क्षमताएं रखरखाव लागत को सही ठहराती हैं, अनुमत तत्वों, विशेषताओं, URL स्कीमों और मीडिया स्रोतों को परिभाषित करें।
2. नेटिव API क्षमताओं को अलग करें
Element.setHTML() और Document.parseHTML() सुरक्षित सैनिटाइजेशन डिफ़ॉल्ट का उपयोग करते हैं; एक कस्टम कॉन्फ़िगरेशन अनुमत सूची (allowlist) को और कड़ा कर सकता है। setHTMLUnsafe() उन मामलों के लिए है जिनमें विशेष संरचना की आवश्यकता होती है, लेकिन इसके लिए सख्त कॉन्फ़िगरेशन और समीक्षा की आवश्यकता होती है। विनिर्देश के लिए स्क्रिप्ट-सक्षम मार्कअप को हटाने के लिए सुरक्षित तरीकों की आवश्यकता होती है, इसलिए API मनमाने HTML के लिए अनुमति पत्र नहीं है।
3. कवरेज और फ़ॉलबैक का मूल्यांकन करें
MDN, HTML Sanitizer API को सीमित उपलब्धता (Limited availability) के रूप में लेबल करता है। नेटिव पथ का फ़ीचर-डिटेक्ट करें और असमर्थित होने पर सर्वर या ऑडिटेड-लाइब्रेरी पथ चुनें। दोनों पथों पर अनुमत सूचियाँ, परीक्षण फिक्स्चर और संस्करण रिकॉर्ड साझा करें। एक फ़ॉलबैक को दृश्य समानता के लिए नीति को ढीला करने के बजाय उच्च-जोखिम वाली क्षमताओं को छोड़ देना चाहिए।
4. क्रॉस-क्लाइंट कंटेंट अनुबंध डिज़ाइन करें
मूल इनपुट और एक सामान्यीकृत सुरक्षित प्रतिनिधित्व को संग्रहीत करें, यह परिभाषित करते हुए कि कौन सा प्रतिनिधित्व संपादन, पूर्वावलोकन, ईमेल, खोज और निर्यात के लिए कार्य करता है। प्रत्येक सर्वर आउटपुट सीमा पर पुन: सत्यापित करें। क्लाइंट-साइड सैनिटाइजेशन DOM इंजेक्शन के जोखिम को कम करता है; यह सर्वर प्राधिकरण, भंडारण या रेंडरिंग नीति की जगह नहीं लेता है।
5. क्रमिक रोलआउट और मेट्रिक्स डिज़ाइन करें
छोटे टेनेंट समूह के लिए एक सामग्री प्रकार सक्षम करें और नेटिव तथा फ़ॉलबैक निष्कर्षों की तुलना करें। खतरनाक-पेलोड ब्लॉकिंग, अवांछित-हटाने की अपील, संपादन-सबमिट सफलता, प्रथम-रेंडर और इनपुट विलंबता, ब्राउज़र कवरेज, नीति-संस्करण स्थिरता और सुरक्षा घटनाओं को ट्रैक करें।
6. Trusted Types और संचालन संभालें
उच्च-जोखिम वाले सिंक के लिए Trusted Types रिपोर्टिंग या प्रवर्तन (enforcement) सक्षम करें, जिसके लिए नीति फ़ंक्शनों को मान्य प्रकार लौटाने की आवश्यकता होती है। नियम-परिवर्तन अनुमोदन, दुर्भावनापूर्ण-फिक्स्चर प्रतिगमन (regression), सामग्री पुनर्संसाधन और आपातकालीन रोलबैक स्थापित करें। ब्राउज़र अपडेट को सुरक्षा नीति को चुपचाप बदलने न दें।
उच्च-गुणवत्ता वाला नमूना उत्तर
मैं सामग्री क्षमता, खतरे के मॉडल और रनटाइम वातावरण को तीन निर्णय तालिकाओं में रखूँगा। HTML Sanitizer API अविश्वसनीय HTML के DOM में प्रवेश करने से पहले संरचित क्लाइंट-साइड सफाई के लिए उपयोगी है; setHTML() में सुरक्षित डिफ़ॉल्ट हैं और WHATWG विनिर्देश स्क्रिप्ट-सक्षम मार्कअप के बने रहने की संभावना को कम करता है, लेकिन MDN अभी भी कवरेज को सीमित के रूप में चिह्नित करता है। उत्पाद योजना एक परिपक्व-लाइब्रेरी या सर्वर-नीति फ़ॉलबैक के साथ नेटिव-फ़र्स्ट है, जो अनुमत तत्वों, विशेषताओं, स्कीमों और फिक्स्चर को साझा करती है। सर्वर मूल और सुरक्षित अभ्यावेदन को संग्रहीत करता है और पृष्ठों, ईमेल, खोज और निर्यात के लिए अलग से मान्य करता है; क्लाइंट की सफाई प्राधिकरण या पूर्ण XSS सुरक्षा प्रदान नहीं करती है। पहले टिप्पणियों को रोल आउट करें और ब्लॉकिंग, निष्ठा, सबमिशन सफलता, प्रदर्शन, ब्राउज़र वितरण और सुरक्षा घटनाओं को मापें। setHTMLUnsafe() का उपयोग केवल सख्त कॉन्फ़िगरेशन, Trusted Types और समीक्षा के साथ उचित संरचना आवश्यकता के लिए करें। नीति अपडेट के बाद ऐतिहासिक दुर्भावनापूर्ण फिक्स्चर को दोबारा चलाएं और प्रतिगमन होने पर तुरंत रोलबैक करें।
सामान्य गलतियाँ
- यह मान लेना कि एक नेटिव ब्राउज़र API सर्वर-साइड सैनिटाइजेशन की आवश्यकता को समाप्त कर देता है।
- केवल डेमो का परीक्षण करना और असमर्थित ब्राउज़रों तथा फ़ॉलबैक स्थिरता को अनदेखा करना।
- मनमाने एम्बेड को बनाए रखने के लिए
setHTMLUnsafe()कॉन्फ़िगरेशन को शिथिल करना। - निष्ठा, अवांछित-निष्कासन और सुरक्षा मेट्रिक्स को केवल एक फ़िल्टर-सफलता संख्या से बदलना।
- Trusted Types को सैनिटाइज़र के रूप में, या सैनिटाइज़र को प्राधिकरण के रूप में मानना।
फ़ॉलो-अप प्रश्न और उत्तर
प्रत्येक सतह को तुरंत नेटिव API पर क्यों न स्विच किया जाए?
कवरेज, सामग्री क्षमता और लीगेसी-डेटा माइग्रेशन अनिश्चित बने हुए हैं। फ़ॉलबैक के साथ एक प्रतिवर्ती (reversible) रोलआउट पहले वास्तविक ब्राउज़र और सामग्री वितरण को मान्य करता है।
क्या होगा यदि नेटिव और सर्वर नीतियां भिन्न हों?
अंतिम सीमा के रूप में सर्वर के साथ, संस्करणित अनुमत सूचियों और दुर्भावनापूर्ण फिक्स्चर को साझा करें। जब क्लाइंट को कोई अंतर मिले तो नीति संस्करणों और नमूनों को रिकॉर्ड करें; नियम को कभी भी चुपचाप ढीला न करें।
Trusted Types प्रवर्तन को सक्षम करना कब उचित है?
प्रमुख सिंक की सूची तैयार होने, नीति फ़ंक्शनों और तीसरे पक्ष के घटकों को माइग्रेट किए जाने और केवल-रिपोर्ट मोड में कम गलत सकारात्मक (false positives) दिखने के बाद, चरणों में प्रवर्तन सक्षम करें।