2009-08-04 13 views
7

मैं सर्वर पर एक स्ट्रिंग का निर्माण कर रहा हूं जो क्लाइंट पर जावास्क्रिप्ट चर में डाल रहा है।एन्कोडिंग एस्ट्रोफ़े

क्या सर्वर पर इस एन्कोडिंग किसी भी मुद्दे से बचने के लिए

अभी मैं कुछ इस तरह कर रहा हूँ का सबसे अच्छा है:

html = html.Replace("'", "'"); 

लेकिन मैं मान वहाँ एक और अधिक सुरुचिपूर्ण मूर्ख का सबूत तरीका है इस तरह की चीजें कर रहे हैं।

उत्तर

10

ऐसा करने के लिए आप Microsoft Anti-Cross Site Scripting Library का उपयोग करके वास्तव में बेहतर हैं। वे एक JavaScriptEncode विधि करता है कि आप क्या चाहते हैं प्रदान करते हैं:

Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False) 
+0

मत भूलना सामने के अंत पर यह unescape को यदि आप इसे उदाहरण के लिए एक अलर्ट बॉक्स के लिए उपयोग करना चाहते हैं। –

+0

Nuget पैकेज: http://nuget.org/packages/AntiXSS/ –

1

मैं जो संदर्भ आप इस स्ट्रिंग का उपयोग कर रहे में यकीन नहीं है, लेकिन \' हो सकता है आप के लिए क्या देख रहे हैं। बैकस्लैश एक बचने वाला चरित्र है और आपको certain characters का उपयोग करने की अनुमति देता है जो अन्यथा स्ट्रिंग अक्षर में मौजूद नहीं हो सकता है।

alert('It\'s amazing'); 
बेशक

, तो आप इस विशेष मामले में alert("It's amazing"); इस्तेमाल कर सकते हैं: यह उत्पादन जावास्क्रिप्ट कैसे दिखाई देते हैं चाहिए।

वैसे भी, आप जावास्क्रिप्ट कोड का निर्माण कर रहे हैं:

html = html.Replace("'", "\\'"); 

दूसरी ओर, वहाँ अक्षर लोप है कि कुछ प्रसंस्करण की जरूरत के अलावा अन्य पात्र हैं। Microsoft Anti-Cross Site Scripting Library का उपयोग करके उन सभी को एक साथ मिल जाएगा।

0

स्ट्रिंग मान में भागने के लिए आपको जो वर्ण हैं, वे बैकस्लैश और वर्ण स्ट्रिंग डेलीमीटर के रूप में उपयोग किए जाते हैं।

अक्षर लोप (') स्ट्रिंग परिसीमक के रूप में उपयोग किया जाता है:

html = html.Replace(@"\", @"\\").Replace("'", @"\'"); 

तो उद्धरण चिह्न (") स्ट्रिंग परिसीमक के रूप में उपयोग किया जाता है:

html = html.Replace(@"\", @"\\").Replace(@"""", @"\"""); 

आप नहीं जानते कि जो सीमांकक है इस्तेमाल किया, या यदि वह भविष्य में बदल सकता, तो आप सिर्फ दोनों बच सकते हैं:

html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\"""); 
1

मैंने पाया कि एंटीएक्सएसएस लाइब्रेरी जो मैं खोज रहा था उसे पूरा करने में सक्षम नहीं था, जो सर्वर पक्ष को एन्कोड करना और जावास्क्रिप्ट में डीकोड करना था।

GlobalObject.escape(string); 

और जावास्क्रिप्ट में क्लाइंट की तरफ:

इसके बजाय मैं Microsoft.JScript.dll जो आप के लिए अनुमति देता इस्तेमाल किया

unescape(string); 
संबंधित मुद्दे