2010-06-24 11 views
6

में सम्मिलन के लिए एक स्ट्रिंग साफ़ है, मैं जावास्क्रिप्ट अलर्ट पॉपअप का उपयोग कर किसी वेब पेज के उपयोगकर्ता को एक त्रुटि प्रदर्शित करने का प्रयास कर रहा हूं, मेरे पास वर्तमान में निम्न कोड है त्रुटि स्ट्रिंग साफ:मैं कैसे सुनिश्चित कर सकता हूं कि जावास्क्रिप्ट अलर्ट ('त्रुटि संदेश')

errorMessage.Replace("'", "\'") 

लेकिन यह पर्याप्त रूप में कुछ अवैध अक्षर नहीं हटाया जा रहा है नहीं है, वहाँ एक स्थिर विधि रूपरेखा है कि html में स्वच्छ प्रविष्टि के लिए मेरी स्ट्रिंग स्वरूपित जाएगा में कहीं है?

अद्यतन: मेरा प्रारंभिक प्रश्न थोड़ा संदिग्ध था। स्ट्रिंग को अलर्ट के रूप में मान्य होना आवश्यक है ('यह कुछ' अवैध टेक्स्ट 'है जो पॉपअप नहीं करेगा'); मैं सर्वर का प्रयास करूंगा। HTML एन्कोड, उम्मीद है कि यह चाल करेगा।

उत्तर

1

आप एक्सएसएस भेद्यता से बचना चाहते हैं, जो कि अच्छा है। निम्नलिखित चीट शीट की सहायता करनी चाहिए (और यह भी स्ट्रिंग से बचने के लिए कोड का संदर्भ होता है):

http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

0

html में स्वच्छ प्रविष्टि के लिए एक स्ट्रिंग से बचने के लिए आप HttpUtility.HtmlEncode विधि का उपयोग कर सकते हैं। मुझे यकीन नहीं है कि यह आपको जावास्क्रिप्ट के साथ मदद करता है।

http://msdn.microsoft.com/en-us/library/73z22y6h.aspx

+1

यह जावास्क्रिप्ट, नहीं HTML के बारे में है ... – Lucero

+0

मैं बोली सही दिशा में इशारा करते हुए के लिए – Hinek

7

आप Web Protection Library में AntiXSS मॉड्यूल पर एक नजर है, तो आप इसे बात का सिर्फ इस तरह के लिए एक JavaScriptEncode(string) विधि है कि मिल जाएगा।

+0

+1 "कि html में स्वच्छ प्रविष्टि के लिए मेरी स्ट्रिंग स्वरूपित जाएगा"! – Lucero

0

आप ASP.NET 4 उपयोग कर रहे हैं आप नए <% का उपयोग कर सकते हैं:%> वाक्यविन्यास उत्पन्न स्ट्रिंग HtmlEncode और AntiXSS के साथ डिफ़ॉल्ट एनकोडर, या किसी अन्य पुस्तकालय आप पसंद कर सकते हैं बदलने के लिए। फिल Haack बताते हैं कि कैसे Using AntiXss as the default encoder for ASP.NET

इस तरह से यह करने के लिए आप इस तरह एक चेतावनी लिख सकते हैं: या तो HtmlEncode या AntiXss इस तरह

alert('<%: this.ErrorMessage %>'); 

पिछले संस्करणों का उपयोग कर सकते कि दूसरों का सुझाव दिया है में,:

alert('<%= HttpUtility.HtmlEncode(this.ErrorMessage) %>'); 

या

alert('<%= AntiXss.HtmlEncode(this.ErrorMessage) %>'); 
0

HttpUtility.HtmlEncode एक एकल उद्धरण (') को एन्कोड नहीं करेगा और एक चेतावनी संदेश के रूप में उपयोग करने के लिए एक स्ट्रिंग एन्कोडिंग के लिए उपयुक्त नहीं है। व्यक्तिगत रूप से मैं इसे इस तरह करता हूं:

public static string EscapeAlertMessage(string value) 
{ 
    value = value.Replace("\\", "\\\\"); 
    value = value.Replace("'", "\\'"); 
    value = value.Replace("\"", "\\\""); 
    return value; 
} 

यदि आपके संदेश में कई पंक्तियां हैं, तो आप उन्हें "\ n" - उदा। अगर लाइनों Environment.NewLine से अलग होते हैं:

value = value.Replace(Environment.NewLine, "\\n"); 

या यदि आप नहीं जानते कि विभाजक हैं (\ r \ n \ n या \ r केवल) आप इस्तेमाल कर सकते हैं:

value = value.Replace("\r", "\\r"); 
value = value.Replace("\n", "\\n"); 
+0

यह एएसपी.NET 4.0 में तय किया गया था। HtmlEncode अब HTML में उपयोग के लिए ' –

+0

'HtmlEncode' एन्कोड स्ट्रिंग के साथ' प्रतिस्थापित करता है। जावास्क्रिप्ट स्ट्रिंग शाब्दिक में स्ट्रिंग का उपयोग करने के लिए, आपको जावास्क्रिप्ट स्ट्रिंग अक्षर के रूप में एन्कोड करना होगा, HTML नहीं। –

0

सहायता के लिए धन्यवाद लेकिन प्रस्तुत उत्तरों में से कोई भी मुझे पूरा समाधान नहीं देता है।

जो का जवाब निकटतम था लेकिन यह \ r \ n न्यूलाइन के लिए खाता नहीं था।मुझे C# newline को जावास्क्रिप्ट समकक्ष में अनुवाद करने का कोई तरीका नहीं मिला।

public static string EscapeAlertMessage(string value) 
{ 
    value = value.Replace("\\", "\\\\"); 
    value = value.Replace("'", "\\'"); 
    value = value.Replace("\"", "\\\""); 
    value = value.Replace(Environment.NewLine, "--"); 

    return value; 
} 
+0

जावास्क्रिप्ट की न्यूलाइन सिर्फ '\ n' –

+0

है जिसे प्रतिस्थापित किया जाएगा (पर्यावरण। न्यूलाइन, "\\ n"); – Joe

+1

एक स्ट्रिंग में किसी भी प्रकार का लाइन ब्रेक (\ n, \ r या \ r \ n) हो सकता है ... क्या यह एक regex नहीं होना चाहिए जो \ r और \ n को एक \\ n के विरुद्ध बदल देता है? – Hinek

3

वहाँ एक सरल उपाय है ... DataContractJsonSerializer और "serialize" स्ट्रिंग मान का उपयोग करें। जेएसओएन को स्ट्रिंग को क्रमबद्ध करके, आप परिभाषा के अनुसार यह सुनिश्चित कर रहे हैं कि यह एक चेतावनी कथन के अंदर अच्छी तरह से काम करेगा।

0

मैं अपनी परियोजनाओं में निम्नलिखित फ़ंक्शन का उपयोग करता हूं। यह जावास्क्रिप्ट के लिए सभी संभव पात्रों escpaes:

/// <summary> 
    /// Encodes a string to be represented as a string literal. The format 
    /// is essentially a JSON string. 
    /// 
    /// Example Output: Hello \"Rick\"!\r\nRock on 
    /// </summary> 
    /// <param name="s"></param> 
    /// <returns></returns> 
    public static string EncodeJsString(string s) 
    { 
     StringBuilder sb = new StringBuilder(); 
     foreach (char c in s) 
     { 
      switch (c) 
      { 
       case '\"': 
        sb.Append("\\\""); 
        break; 
       case '\\': 
        sb.Append("\\\\"); 
        break; 
       case '\b': 
        sb.Append("\\b"); 
        break; 
       case '\f': 
        sb.Append("\\f"); 
        break; 
       case '\n': 
        sb.Append("\\n"); 
        break; 
       case '\r': 
        sb.Append("\\r"); 
        break; 
       case '\t': 
        sb.Append("\\t"); 
        break; 
       case '\'': 
        sb.Append("\\'"); 
        break; 
       default: 
        int i = (int)c; 
        if (i < 32 || i > 127) 
        { 
         sb.AppendFormat("\\u{0:X04}", i); 
        } 
        else 
        { 
         sb.Append(c); 
        } 
        break; 
      } 
     } 

     return sb.ToString(); 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे