2011-12-02 14 views
5

मैं लागू कर दिया है एक Request.QueryString["somestr"].ToString();क्रॉस साइट से मेरी स्वयं की रक्षा पटकथा

मैं HttpUtility.HtmlEncode(Request.QueryString["somestr"].ToString();

करके क्रॉस साइट स्क्रिप्टिंग को दबाने मैं अभी भी एक मुद्दा जहां एक उपयोगकर्ता कर सकते हैं:

myfriendlydomain.com /? somestr = '; चेतावनी (WOO XSS सफल); परीक्षण ='

मैं इसे कैसे होने से रोक सकता हूं?

अनुरोध:

//Code Behind 
if(request.querystring["somestr"] != null) 
{ 
    AffiliatesEmail = HttpUtility.HtmlEncode(Request.QueryString["somestr"].ToString();  
} 

//Front End 
<script type="text/javascript"> 
    //<![CDATA[ 
    /*** Do not change ***/ 
    var SomeVAR = {}; 
    SomeVAR.Tracking.Sale.orderRef = '<%= AffiliatesEmail %>'; 
    //]]> 
</script> 

<script src="https://www.somethirdparty.com/somejscript.js" type="text/javascript" defer="defer"> </script> 

यह हमारी कार्यान्वयन है। कुछ भी बाद में मुझे विश्वास नहीं है प्रासंगिक है।

+0

यहां प्रासंगिक जानकारी _how_ इंजेक्शन अभी भी सफल हो सकती है - आपको इसे कहीं भी पृष्ठ पर लिखना होगा, क्योंकि इसे क्वेरीस्ट्रिंग में बस जोड़ना इसे काम करने के लिए पर्याप्त नहीं है। हमें बताएं कि आप 'Request.QueryString ["somestr"] के साथ क्या करते हैं। ToString(); ' – Widor

+0

अतिरिक्त जानकारी। – Anicho

+0

लेकिन हम अभी भी यह नहीं बता सकते कि यह स्ट्रिंग कहां समाप्त होती है। 'AffiliatesEmail' क्या है? एक्सएसएस हमले को सक्षम करने के लिए इसकी सामग्री कहां जाती है? – Widor

उत्तर

2

स्ट्रिंग को साफ़ करने के लिए आप JavaScriptStringEncode() Method का उपयोग कर सकते हैं और इसे होने से रोकने के लिए इसे एन्कोड कर सकते हैं।

AntiXSS लाइब्रेरी का उपयोग करने का एक और तरीका है।

+0

जावास्क्रिप्टस्ट्रिंगएन्कोड() विधि एक .net फ्रेमवर्क है .4.0 फ़ंक्शन हम अभी भी नोटिस फ्रेमवर्क 3.5 पर आगे नोटिस तक हैं। – Anicho

+1

एंटीएक्सएसएस .NET 3.5 के साथ-साथ – Erlend

+0

हाँ आपका अधिकार है, दूसरा समाधान लागू करने के लिए तेज़ है, मैं समय से बाध्य हूं कि मुझे यह नहीं कहना चाहिए कि मैं एक छोटा सा कट देव की तरह लग रहा हूं। – Anicho

0

यह सुनिश्चित करने के लिए कि आपके पास वैध डेटा आ रहा है, आपको प्रत्येक क्वेरीस्ट्रिंग इनपुट को सत्यापित करने की आवश्यकता है। मैं किसी पृष्ठ पर सीधे मूल्य नहीं लिखूंगा।

+0

चेक के रूप में मान्य करें यह कुछ ऐसा नहीं होना चाहिए। तो अगर यह केवल एएए, बीबीबी, सीसीसी होना चाहिए तो जांच करें कि क्या यह है कि अगर नहीं तो इसे अस्वीकार कर दें। – Anicho

+0

सही - इस मामले में मैं यह सुनिश्चित करने के लिए एक नियमित अभिव्यक्ति के साथ जाऊंगा कि आपको ईमेल प्राप्त हो रहा है। अन्यथा डेटा को अस्वीकार करें। – Tim

+0

यह सही पाने के लिए वास्तव में मुश्किल है। इनपुट में हमला हो सकता है और फिर भी एक वैध ईमेल पता हो सकता है। – Erlend

1

उस संदर्भ को जानने के द्वारा जिसमें आप AffiliatesEmail स्ट्रिंग का उपयोग कर रहे हैं, यह यह जानने में सहायता करता है कि स्ट्रिंग को सत्यापित करने और उसे साफ करने में आपको कितना गहन होना है।

उदाहरण के लिए कहें, हम जानते हैं कि AffiliatesEmail केवल वैध था अगर यह संख्यात्मक था। इस तरह, यदि आप किसी भी Request.QueryString["somestr"] को अस्वीकार कर चुके हैं तो आपको संरक्षित किया जाएगा जो किसी संख्या के रूप में मान्य नहीं था।

अब मुझे संदेह है कि AffiliatesEmail वास्तव में एक वैध ईमेल पता होना चाहिए।

है कि ज्ञान का उपयोग करना, हम अब एक ईमेल पते के रूप में यह मान्य और बाकी सब कुछ अस्वीकार कर सकते हैं:

using System.Net.Mail; 
try 
{  
    MailAddress ma = new MailAddress(AffiliatesEmail); 
} 
catch (FormatException fe) 
{ 
    //Email isn't valid, so don't output it to the client!!! 
} 

कोड बस ऊपर सत्यापित करता स्ट्रिंग एक ईमेल पता (के रूप में नेट द्वारा परिभाषित) है या नहीं - अगर ऐसा नहीं है, तो हमें इसके बारे में चिंता करने की आवश्यकता नहीं है कि है, क्योंकि हम बस इसे भरोसा नहीं करते हैं।

तो क्वेरीस्ट्रिंग में जो कुछ भी हो रहा है उसे शांत करने पर भी लटका न लें - केवल स्वीकार्य सीमाओं को जानकर, आप जटिल रेगेक्स और एक्सएसएस-सफाई दिनचर्या से बच सकते हैं।

+0

इसे सरल बनाने और इसे इस तरह समझाए जाने के लिए अच्छा धन्यवाद। – Anicho

+0

शार्क और Widor उत्तरों प्रासंगिक हैं। मैंने इसका इस्तेमाल किया। – Anicho

+1

वाह। इनपुट सत्यापन यहां सही समाधान नहीं है। यहां ईमेल पते में मान्य अक्षरों की सूची देखें: http://en.wikipedia.org/wiki/Email_address यदि हमलावर ईमेल पते में प्रवेश करता है तो क्या होता है: जो '+ अलर्ट (xss) +' @ evil.com – Erlend