कभी-कभी, सर्वर पक्ष इनलाइन जावास्क्रिप्ट कोड में एम्बेडेड स्ट्रिंग उत्पन्न करेगा। उदाहरण के लिए, यदि "उपयोगकर्ता नाम" एएसपी.NET द्वारा उत्पन्न किया जाना चाहिए। फिर ऐसा लगता है।क्या जावास्क्रिप्ट स्ट्रिंग के लिए "<" and ">" वर्ण से "भागना" आवश्यक है?
<script>
var username = "<%UserName%>";
</script>
यह एक उपयोगकर्ता उसकी/उसके नाम होने की
</script><script>alert('bug')</script></script>
यह XSS जोखिम है हो सकता है क्योंकि, सुरक्षित नहीं है।
तो, मूल रूप से, कोड होना चाहिए:
<script>
var username = "<% JavascriptEncode(UserName)%>";
</script>
क्या JavascriptEncode करता charater जोड़ने के लिए है "\" से पहले "/" और " '" और "" तो, उत्पादन html "। की तरह है वर उपयोगकर्ता नाम = "</script> चेतावनी (\ 'बग \') </script> </script>";।
ब्राउज़र की व्याख्या नहीं होगा "+०१२३८७०३९५४/स्क्रिप्ट> "स्क्रिप्ट ब्लॉक के अंत के रूप में। तो, XSS से बचने में।
हालांकि, अभी भी "<" और ">" हैं। इन दो पात्रों से बचने के लिए भी सुझाव दिया जाता है। सबसे पहले, मुझे विश्वास नहीं है कि "<" को "& लेफ्टिनेंट" में बदलना एक अच्छा विचार है। और ">" से "& gt;" यहाँ। और, मुझे यकीन नहीं है कि "<" को "\ <" और ">" से "\>" में बदलना सभी ब्राउज़रों के लिए पहचान योग्य है। ऐसा लगता है कि "<" और ">" के लिए आगे एन्कोडिंग करना आवश्यक नहीं है।
क्या इस पर कोई सुझाव है?
धन्यवाद।
लेकिन फिर भी '>' 'में]]>' अंदर CDATA ब्लॉक '> द्वारा repalced किया जाना चाहिए'। तो 'foo [बार [0]]> 1234' साथ' foo [बार [0]] < 1234' या 'foo [बार [0]]> 1234' बदला जाना चाहिए। अन्यथा सीडीएटीए ब्लॉक समय से बंद हो जाएगा। – Gumbo
चूंकि सीडीएटीए प्रस्तुत करता है और वर्ण "&" और "इकाई का प्रारंभ" नहीं है - जो काम नहीं करेगा। यदि आपको स्ट्रिंग का प्रतिनिधित्व करने की आवश्यकता है "]]>" सीडीएटीए के अंदर तो मुझे पूरा यकीन है कि आप चूसते हैं और (सीडीएटीए ब्लॉक के बाहर) शुरू करने के लिए इकाइयों का उपयोग करना चाहिए – Quentin
या बस एक स्पेस जोड़ें: 'foo [bar [0 ]]> 1234' - या यदि यह एक स्ट्रिंग का हिस्सा है: '' foo [bar [0]] '+'> 1234'' - या बस अपनी सभी स्क्रिप्ट बाहरी .js फ़ाइलों में शामिल करें। – gnarf