अविश्वसनीय डेटा को markup नहीं, text की तरह render करें: framework को escape करने दें और innerHTML, dangerouslySetInnerHTML तथा v-html से बचें। अगर HTML लेना ही पड़े तो DOM तक पहुंचने से पहले उसे सर्वर पर या किसी maintained sanitizer से साफ करें। nonces के साथ Content Security Policy जोड़ें ताकि inline script विकल्प ही न रहे, URLs जांचें ताकि javascript scheme किसी href में न पहुंचे, और tokens को ऐसी जगह से दूर रखें जिसे कोई भी script पढ़ सकती है।
इंटरव्यूअर यह क्यों पूछते हैं
frameworks डिफ़ॉल्ट रूप से escape करते हैं, तो इंटरव्यूअर जानना चाहते हैं कि आप बचे हुए छेद समझते हैं या नहीं: कच्चे HTML का injection, attribute तथा URL वाले sinks, और तीसरे पक्ष की scripts। जवाब से पता चलता है कि आप sources और sinks की भाषा में सोचते हैं या बस escape करना याद रखते हैं। CSP और trusted types का ज़िक्र बताता है कि आपने परतदार बचाव शिप किया है, यह मानकर नहीं बैठे कि framework सब संभाल लेगा।
अपना जवाब कैसे स्ट्रक्चर करें
- डिफ़ॉल्ट से शुरू करें: text की तरह render करके escape करना।
- वे खास sinks गिनाएं जो framework को दरकिनार कर देते हैं।
- सिर्फ element के content नहीं, URL और attribute injection भी कवर करें।
- परतदार बचाव जोड़ें: CSP, sanitizer, token का भंडारण।
उदाहरण जवाब
बुनियाद यह है कि हर अविश्वसनीय चीज़ text की तरह render हो, जो framework मेरे लिए कर देता है। तो असली काम उन जगहों की जांच है जो इससे बाहर निकल जाती हैं। कोई भी innerHTML, कोई भी dangerouslySetInnerHTML, कोई भी templating जो कच्चा markup लिखती है, और वे sinks जो लोग भूल जाते हैं: यूज़र के input से बना href कोई javascript scheme ले जा सकता है, और style या srcdoc attribute भी उतना ही खतरनाक है। अगर किसी feature को सच में rich text चाहिए, मसलन यूज़र की लिखी हुई descriptions, तो मैं खुद tags छानने की कोशिश करने की जगह किसी maintained library और allow list से sanitize करता हूं, और यह जितना हो सके storage के पास करता हूं। इसके ऊपर मुझे nonce वाली Content Security Policy चाहिए ताकि inline script चले ही नहीं, जिससे बची खुची ज़्यादातर गड़बड़ियां किसी breach की जगह console में एक blocked संदेश बन जाती हैं। और मैं session tokens HttpOnly cookies में रखता हूं, क्योंकि अगर कोई payload उतर ही जाए तो blast radius में यूज़र का session नहीं होना चाहिए।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- Content Security Policy कहां आपकी मदद नहीं कर पाती?
- यूज़र का भेजा हुआ rich text सुरक्षित तरीके से कैसे render करेंगे?
- DOM आधारित XSS क्या है, और सर्वर की छानबीन उसे क्यों चूक जाती है?
फ्रंटएंड डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें