2013-02-08 24 views
5

मैं एएसपी.Net सी # + jQuery AJAX वेबसाइट प्रोजेक्ट पर काम कर रहा हूं। मैं xss हमलों को रोकने की कोशिश कर रहा हूं और मुझे पता है कि नीचे पूर्ण दृष्टिकोण नहीं है, लेकिन कम से कम मुझे यह करना चाहिए - उपयोगकर्ताओं से मुफ्त स्ट्रिंग इनपुट स्वीकार करते समय HTML HTML को उपयोग करने के लिए)। और मैं वास्तव में किसी को कृपया जांच कर रहा हूं कि मैं सही काम कर रहा हूं या नहीं।एक्सएसएस हमले को रोकें

तो मान लें कि हमारे पास एक परिदृश्य है जिसके लिए पृष्ठ नियंत्रण में से एक "विवरण" टेक्स्ट बॉक्स है और उपयोगकर्ता अपने उत्पाद का वर्णन करने के लिए उपयोग की जाने वाली "मुक्त" स्ट्रिंग दर्ज कर सकते हैं। एक्सएसएस हमलावर इनपुट प्राप्त करने से रोकने के लिए, सर्वर साइड पेज विधि पर, मैंने HtmlUtility.HtmlEncode() का उपयोग करके "विवरण" टेक्स्ट लपेट लिया है, इसलिए डेटाबेस में जाने से पहले स्ट्रिंग को शुद्ध पाठ के रूप में व्याख्या किया जाएगा i.e. <script>&gt;script&lt; बन जाता है।

जो भाग मैं अनुसरण करता हूं वह है कि मुझे संदेह है - इसे वापस करने से पहले एचटीएमएल एन्कोडेड टेक्स्ट को कैसे संभालना है?

जब उपयोगकर्ता विवरण टेक्स्ट दर्ज करना चाहता है, तो वेबसाइट डेटाबेस से पुनर्प्राप्त की जाती है और इसे प्रिंट करती है।

क्या यह वर्णन पर एचटीएमएल डिकोड करने के लिए तार्किक है ताकि उपयोगकर्ता उन wierd &gt;&lt; अक्षरों को नहीं देख पाएंगे? क्या यह पहले स्थान पर HtmlEncode का उपयोग करने के उद्देश्य को हरा देगा? और यदि हां, क्या यह सही jQuery लाइन को उपयोगकर्ताओं को पाठ को डीकोड और प्रिंट करने के लिए है ???

$("#txtDescription").val($(this).html(obj.Description).text();

आप बहुत बहुत

उत्तर

1

आपको प्रत्येक स्ट्रिंग के सामग्री प्रकार को ध्यान में रखना चाहिए और यह कहां से आया - चाहे सुरक्षित स्रोत या अविश्वसनीय स्रोत से, और यह भी पता चले कि दो स्ट्रिंग्स को दोबारा जोड़ते समय दोनों एक ही सामग्री के तार हैं प्रकार और विश्वास स्तर।

मैं "विवरण" पाठ HtmlUtility.HtmlEncode() का उपयोग कर ऊपर लपेट, तो स्ट्रिंग डेटाबेस अर्थात <script>&gt;script&lt; हो जाता है में जाने से पहले शुद्ध पाठ के रूप में व्याख्या की जाएगी।

यहाँ

यह लग रहा है आप कह की तरह कर रहे हैं वर्णन क्षेत्र सादा पाठ की एक स्ट्रिंग है और क्या आप डेटाबेस में भंडारण कर रहे हैं सुरक्षित HTML की एक स्ट्रिंग है (के बाद से HtmlEncode के उत्पादन खतरनाक शामिल करने के लिए नहीं की गारंटी है कोड)।

यह समय-समय पर एन्कोडिंग सामग्री के साथ पहली समस्या दिखाता है। यदि आप सर्वर को भेजने के लिए SQL स्ट्रिंग लिख रहे हैं, तो HTML के रूप में प्री-एन्कोडिंग आपको SQL इंजेक्शन से सुरक्षित नहीं रखती है। एसक्यूएल तैयार कथन का उपयोग करना एसक्यूएल के लिए इसे दूर करने का एक अच्छा तरीका है, लेकिन प्री-एन्कोडिंग सभी संदर्भों में स्ट्रिंग को सुरक्षित नहीं करता है।

जो भाग मैं अनुसरण करता हूं वह है कि मुझे संदेह है - एचटीएमएल एन्कोडेड टेक्स्ट को उपयोगकर्ता को वापस लौटने से पहले कैसे संभालना है?

जब उपयोगकर्ता विवरण टेक्स्ट दर्ज करना चाहता है, तो वेबसाइट डेटाबेस से पुनर्प्राप्त की जाती है और इसे प्रिंट करती है।

यदि उपयोगकर्ता सुरक्षित HTML प्राप्त कर रहा है, और आपके पास सुरक्षित HTML की एक स्ट्रिंग है, तो आप इसे उपयोगकर्ता को भेज सकते हैं।

यदि उपयोगकर्ता को सादा पाठ ईमेल प्राप्त हो रहा है, तो आपको डेटाबेस में सुरक्षित HTML को सादे पाठ में परिवर्तित करने की आवश्यकता है।

यदि उपयोगकर्ता आरएसएस प्राप्त कर रहा है, तो आपको यह सुनिश्चित करना होगा कि आप एक्सएमएल के सबस्ट्रिंग का उपयोग करके अपने आरएसएस को लिखें।

Contextual auto-escaping यह सुनिश्चित करने में आपकी सहायता कर सकता है कि आउटपुट आउटपुट पर उचित रूप से एन्कोड किए गए हैं।

6

पाठ डेटाबेस में जा रहा सांकेतिक शब्दों में बदलना न करें धन्यवाद। इसे अपने कच्चे, unfiltered रूप में स्टोर करें। HTML-सक्षम संदर्भ (जैसे ब्राउज़र पर आउटपुट) में आउटपुट होने पर स्ट्रिंग केवल HTML chracters को एन्कोड करें।

+0

हाय कोलिंक, आपके उत्तर के लिए धन्यवाद :)। टेक्स्ट को अपने कच्चे unfiltered रूप के साथ डेटाबेस में सहेजना बेहतर होगा, लेकिन फिर मेरे सिस्टम को डेटाबेस में जाने से पहले रैपिंग की आवश्यकता होगी, और किसी भी तरह से, मुझे यकीन नहीं है कि इसे वापस प्रिंट कैसे करें उपयोगकर्ता – user1487182

+0

क्या हम उपयोगकर्ताओं को अजीब पात्रों को प्रिंट करना चाहते हैं या प्रिंटिंग से पहले अक्षर को डीकोड करना सामान्य अभ्यास है? यदि हां, तो उस हिस्से को कैसे संभालें? मैं उन मूल्यों को पाठ बॉक्स में वापस प्रिंट करना होगा और ऐसा लगता है जैसे " > < स्क्रिप्ट > चेतावनी (' ' XSS) </लिपि > बहुत बहुत धन्यवाद – user1487182

+1

यह मददगार होगा बातें दिख रहा है अगर किसी राज्य क्यों तुम सांकेतिक शब्दों में बदलना नहीं चाहिए पाठ डेटाबेस में जा रहा है ... खासकर जब उत्तर में 5 अप वोट हैं (पृष्ठ पर सबसे अधिक)। – EleventyOne

0

fansputility.htmlencode के बजाय AntiXss library का उपयोग करना एक अच्छा विचार है। अधिक स्पष्टता के लिए प्रलेखन पढ़ने पर विचार करें। आपके पास एंटीएक्सएसएस लाइब्रेरी w.r.t इनपुट एन्कोडिंग में व्यापक विकल्प हैं। यह discussion में वर्णित एक और अधिक सुरक्षित सफेद सूची आधारित दृष्टिकोण का पालन करता है।