2013-03-07 3 views
9

तो मैं एक सफेद सूची के साथ एचटीएमएल चपलता का उपयोग कर एक सी # एचटीएमएल सैनिटाइजर का निर्माण कर रहा हूं। यह ठीक काम करता है, इस तरह के मामलों को छोड़कर:मैं स्रोत जैसे गुणों में एक्सएसएस हमलों के खिलाफ कैसे सुरक्षा करता हूं?

<img src="javascript:alert('BadStuff');" /> 
<img src="jav&#x09;ascript:alert('BadStuff');"> 

मैं स्पष्ट रूप से एक दायरे, src विशेषता अनुमति देना चाहते हैं बस नहीं दुर्भावनापूर्ण सामान। मैंने जो सामान देखा है, उसने टैग और उनके गुणों के लिए श्वेतसूची की सिफारिश की है। हालांकि आप इस तरह कुछ कैसे संभालेंगे? मुझे पता है कि यह किसी भी नए ब्राउज़र में काम नहीं करेगा, लेकिन मैं सुरक्षा से बहुत परिचित नहीं हूं और मुझे यकीन है कि कुछ अन्य चालाक चीजें हमलावर कर सकती हैं।

+0

आप हर इनपुट या शायद यूआरएल एनकोड यूआरएल को पार्स सकता है। लेकिन मुझे यकीन नहीं है कि यह एक्सएसएस को रोक देगा। – rekire

उत्तर

5

क्रॉस-साइट स्क्रिप्टिंग (एक्सएसएस) हमले क्लाइंट-साइड स्क्रिप्ट कोड इंजेक्शन द्वारा वेब पेज सत्यापन में भेद्यता का फायदा उठाते हैं। सामान्य भेद्यताएं जो आपके वेब अनुप्रयोगों को क्रॉस-साइट स्क्रिप्टिंग हमलों के लिए अतिसंवेदनशील बनाती हैं उनमें इनपुट को सही ढंग से मान्य करने, आउटपुट एन्कोड करने में विफल होने और साझा डेटाबेस से पुनर्प्राप्त डेटा पर भरोसा करने में विफलता शामिल है। क्रॉस-साइट स्क्रिप्टिंग हमलों के खिलाफ अपने एप्लिकेशन की सुरक्षा के लिए, मान लें कि सभी इनपुट दुर्भावनापूर्ण है। सभी इनपुट को सीमित और मान्य करें। सभी आउटपुट को एन्कोड करें, संभावित रूप से, HTML वर्णों को शामिल कर सकते हैं। इसमें फाइलों और डेटाबेस से डेटा पढ़ा जाता है।

क्रॉस-साइट स्क्रिप्टिंग हमले के सबसे गंभीर उदाहरणों में से एक तब होता है जब कोई हमलावर प्रमाणीकरण कुकी को पुनर्प्राप्त करने के लिए स्क्रिप्ट लिखता है जो किसी विश्वसनीय साइट तक पहुंच प्रदान करता है और फिर हमलावर को ज्ञात वेब पते पर कुकी पोस्ट करता है। यह हमलावर को वैध उपयोगकर्ता की पहचान को धोखा देने और वेबसाइट पर अवैध पहुंच प्राप्त करने में सक्षम बनाता है।

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

  • विवश और इनपुट को मान्य करने के लिए असफल।
  • आउटपुट एन्कोड करने में विफल।
  • साझा डेटाबेस से पुनर्प्राप्त डेटा को विश्वसनीय करना।

    • इनपुट बाध्य करें: करने के लिए

    दिशानिर्देश

    क्रॉस-साइट स्क्रिप्टिंग हमलों को रोकने के दो सबसे महत्वपूर्ण countermeasures कर रहे हैं।

  • एनकोड आउटपुट।

कदम

का सारांश क्रॉस-साइट स्क्रिप्टिंग रोकने के लिए, निम्न चरणों का पालन:

चरण 1. चेक कि ASP.NET अनुरोध सत्यापन सक्षम है।

चरण 2. समीक्षा एएसपी.NET कोड जो HTML आउटपुट उत्पन्न करता है।

चरण 3. निर्धारित करें कि HTML आउटपुट में इनपुट पैरामीटर शामिल हैं या नहीं।

चरण 4। संभावित रूप से खतरनाक HTML टैग और विशेषताओं की समीक्षा करें।

चरण 5। Countermeasures का मूल्यांकन करें।

विस्तार के लिए दूसरे संदर्भ देखें।

संदर्भ:

Cross-site scripting explained: How to prevent XSS attacks

How To: Prevent Cross-Site Scripting in ASP.NET

0

कुछ "वैध यूरी या तो http/https योजना के साथ सापेक्ष या पूर्ण होना चाहिए" अच्छा प्रारंभ बिंदु है।

+0

@ user1652427 सुनिश्चित नहीं है कि आपका क्या मतलब है "XXXX के साथ शुरू होता है"? 'उरी। श्मेम' और 'उरी। ट्रीक्रेट' वे हैं जिनका मैं उपयोग करूंगा। मुझे दृढ़ता से संदेह है कि आप पढ़कर और सीखने के बिना 'स्ट्रिंग। स्टार्ट्स विथ' का उपयोग करने के बारे में बात कर रहे हैं [उरी - आरएफसी 3 9 86] (http://www.ietf.org/rfc/rfc3986.txt) दिल से। –

0

आप सुरक्षित रूप से स्रोत विशेषता को सुरक्षित कर सकते हैं, बशर्ते कि आप इनपुट को व्यवस्थित और संभाल लें। ऐसा करने के लिए आपको पहले वैध URL वर्णों, canonicalize it की श्वेतसूची के माध्यम से इसे स्वच्छ करना चाहिए, और तब सत्यापित करें कि यह एक वैध छवि को इंगित करता है।

आपके द्वारा उल्लिखित श्वेतसूची पहला कदम है (और उस पर एक महत्वपूर्ण)। श्वेतसूची को लागू करने के लिए, बस प्रत्येक वर्ण को हटा दें जो यूआरएल के लिए मान्य नहीं है। यह भी सत्यापित करें कि यूआरएल सही ढंग से गठित किया गया है, जिसका अर्थ है कि यह एक वैध संसाधन को इंगित करता है जिसे उपयोगकर्ता तक पहुंचने में सक्षम होना चाहिए। उदाहरण के लिए, उपयोगकर्ता को file://sensitive.txt या कुछ में गुजरकर सर्वर पर स्थानीय फ़ाइल तक नहीं पहुंचना चाहिए। यदि http या https एकमात्र प्रोटोकॉल हैं जिनका उपयोग किया जाना चाहिए, तो जांचें कि URL उन लोगों के साथ शुरू होता है। यदि आप अतिरिक्त पागल हैं तो आप पूरी तरह से अनुरोध को अस्वीकार कर सकते हैं क्योंकि यह स्पष्ट है कि इसे छेड़छाड़ की गई है। Whitelisting महत्वपूर्ण है, लेकिन अकेले whitelisting सुविधा सुरक्षित रखें।

कैनोनिकललाइजेशन महत्वपूर्ण है क्योंकि कई हमले यूआरएल जमा करने पर निर्भर करते हैं जो अंततः आपको एक निश्चित स्थान पर ले जाते हैं, लेकिन चीजों को प्राप्त करने के लिए तर्क की कंप्यूटर की सहज कमी का दुरुपयोग कर सकते हैं। यह उसी संसाधन में डुप्लिकेट पथों को खत्म करने में भी मदद करेगा जो प्रदर्शन में सुधार कर सकते हैं (या कम से कम एक ज्ञात फ़ाइल को दोबारा जांचने से प्रदर्शन में सुधार करने की अनुमति नहीं देता है, जो आपने पिछली बार चेक की थी, तब से नहीं बदला है। हालांकि इसके साथ सावधान रहें आखिरी संशोधित तारीख को धोखा देना संभव है, इसलिए हमलावर पहले से ही "चेक और भरोसेमंद" होने के बाद एक दुर्भावनापूर्ण फ़ाइल स्वैप कर सकता है)।

यह सत्यापित करने के लिए कि आप एक वैध छवि को इंगित कर रहे हैं, फ़ाइल खोलें और पहले कुछ बाइट्स में पढ़ें। बस फ़ाइल एक्सटेंशन पर भरोसा करें, हालांकि फ़ाइल खोलने से पहले इसे पहले जांचें (प्रदर्शन के लिए और सुरक्षा के लिए)। प्रत्येक छवि प्रारूप में बाइट्स का एक निश्चित पैटर्न होता है जिसे आप जांच सकते हैं। look at first is JPEG पर एक अच्छा। किसी दुर्भावनापूर्ण उपयोगकर्ता को छवि फ़ाइल में शेलकोड या अन्य हमले कोड डालने के लिए अभी भी संभव हो सकता है कि में उचित शीर्षलेख शामिल हैं, लेकिन यह करना अधिक कठिन है। यह एक प्रदर्शन बाधा होगी इसलिए यदि आप इसे लागू करते हैं तो उचित तरीके से योजना बनाएं।

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