flawopen.com/JavaScript में XSS/Svelte
क्या Svelte डिफ़ॉल्ट रूप से XSS से सुरक्षित है?
`{comment}` को छपी हुई पर्ची समझें: कोण वाले ब्रैकेट भी दिखाई देने वाले टेक्स्ट रहते हैं। `{@html comment}` ऐसा है जैसे टाइपसेटर से पन्ने के चिह्नों को लेआउट निर्देश मानने को कहा जाए। यदि ये चिह्न अविश्वसनीय स्रोत से आएँ, तो ब्राउज़र उन्हें HTML मानकर XSS पैदा कर सकता है।
<p>{@html comment}</p>
// मान को वास्तविक HTML markup की तरह parse किया जाता है
<p>{comment}</p>
// अपने-आप escape होता है
नियम
Svelte सामान्य {expression} आउटपुट को escaped टेक्स्ट के रूप में compile करता है, इसलिए मान को HTML markup की तरह interpret नहीं किया जाता। इसके विपरीत, {@html} जानबूझकर HTML string रेंडर करता है। Svelte दस्तावेज़ XSS रोकने के लिए मान को escape करने या केवल नियंत्रित मानों का उपयोग करने की चेतावनी देते हैं। इसे सुरक्षा-संवेदनशील HTML insertion point मानें और उपयोगकर्ता के rich text के लिए अनुरक्षित sanitizer उपयोग करें।
अपने codebase की जाँच
`.svelte` फ़ाइलों में `{@html}` खोजें। हर परिणाम के लिए मान का स्रोत और उस पर हुए सभी बदलावों का पता लगाएँ। उपयोगकर्ता इनपुट, बाहरी डेटा और संग्रहीत उपयोगकर्ता सामग्री को अविश्वसनीय मानें। यदि सामग्री टेक्स्ट होनी चाहिए, तो `{expression}` उपयोग करें। Rich HTML आवश्यक हो तो अनुरक्षित HTML sanitizer से साफ़ करें और जाँचें कि निषिद्ध markup हट गया है।
grep -rn "{@html" --include="*.svelte" .रिच HTML: सैनिटाइज़ेशन की सीमा बनाए रखें
जब सामग्री को टेक्स्ट के रूप में दिखाना हो, तो `{expression}` का उपयोग करें। यदि उपयोगकर्ताओं को HTML लिखना आवश्यक हो, तो `{@html}` में भेजने से पहले अंतिम सामग्री को DOMPurify जैसे नियमित रूप से रखरखाव किए जाने वाले HTML सैनिटाइज़र से सैनिटाइज़ करें। इसके बाद सैनिटाइज़ किए गए परिणाम में कुछ जोड़ें या उसे बदलें नहीं; इससे सुरक्षा निष्प्रभावी हो सकती है। सैनिटाइज़र को अपडेट रखें और केवल उत्पाद के लिए आवश्यक मार्कअप तत्वों तथा विशेषताओं की अनुमति दें। HTML सैनिटाइज़ेशन उसी मान को JavaScript, CSS या URL संदर्भों में सुरक्षित नहीं बनाता।
संदर्भ
- Svelte दस्तावेज़ — {@html ...}
- flawopen.com — JavaScript में XSS
- DOMPurify — project documentation
- OWASP — Cross Site Scripting Prevention