2009-04-07 9 views
5

मैं अक्षर हैं जो यूआरएलक्वेरी स्ट्रिंग में कौन से वर्ण असुरक्षित हैं?

मेरे नमूना यूआरएल http://localhost/add.aspx?id=4;req=4

अक्षर है कि मैं ब्लॉक की जरूरत है की एक सूची दे में vulnerablities के कारण को रोकने के लिए की जरूरत है।

मैं एएसपीनेट वेब पेज का उपयोग कर रहा हूं। मैं एसक्यूएल सर्वर डेटाबेस से जानकारी बाध्य कर रहा हूँ।

मैं सिर्फ पात्रों सूची यूआरएल भी

+2

न करें निशान नकारात्मक प्रतिष्ठा reqular भाव के साथ गठबंधन करने के लिए है। यदि आपको सटीक उत्तर नहीं पता है तो इसे छोड़ दें। –

+0

आपको अधिक जानकारी देने की आवश्यकता है। यह वास्तव में इस बात पर निर्भर करता है कि डेटा का उपयोग कैसे किया जा रहा है। उदाहरण के लिए यदि आप आईडी के मूल्य को खींचते हैं और MSSQL के लिए गतिशील एसक्यूएल क्वेरी उत्पन्न करते हैं, तो यह अलग होगा यदि आप एलडीएपी लुकअप इत्यादि कर रहे हैं तो – JoshBerke

+0

@Josh अधिक जानकारी –

उत्तर

6

क्या प्रौद्योगिकी का उपयोग कर रहे के आधार पर, आमतौर पर एक अंतर्निहित फ़ंक्शन होता है जो आपके लिए इसे संभाल लेगा।

ASP.NET (VB) & क्लासिक एएसपी

myUrl = Server.UrlEncode(myUrl) 

ASP.NET (सी #)

myUrl = Server.UrlEncode(myUrl); 

पीएचपी

$myUrl = urlencode($myurl); 

यदि आप बस असुरक्षित वर्ण को हटा देना चाहते हैं, तो आपको नियमित अभिव्यक्ति की आवश्यकता होगी। RFC 1738 को परिभाषित करता है क्या वर्ण URL के लिए असुरक्षित हैं:

असुरक्षित:

वर्ण कारणों की एक संख्या के लिए असुरक्षित हो सकता है। क्योंकि महत्वपूर्ण रिक्त स्थान गायब हो सकता है और
तुच्छ रिक्त स्थान पेश किया जा सकता है जब यूआरएल बदल दिया जाता या
टाइपसेट या शब्द-संसाधन कार्यक्रमों के उपचार के अधीन अंतरिक्ष
चरित्र असुरक्षित है। वर्ण "<" और ">" असुरक्षित हैं क्योंकि उन्हें
मुफ्त टेक्स्ट में यूआरएल के आसपास delimiters के रूप में उपयोग किया जाता है; उद्धरण चिह्न ("" ") के लिए
कुछ सिस्टम में दिए गए यूआरएल परिसीमित किया जाता है। चरित्र" # "असुरक्षित है और चाहिए
हमेशा एन्कोड किया जाना है क्योंकि यह वर्ल्ड वाइड वेब में और अन्य
प्रणालियों में प्रयोग किया जाता है से एक यूआरएल को डिलीमिट करने के लिए इसका पालन करें। "%" असुरक्षित है क्योंकि इसका उपयोग
अन्य अक्षरों के एन्कोडिंग के लिए किया जाता है।अन्य वर्ण असुरक्षित हैं क्योंकि
गेटवे और अन्य परिवहन एजेंट कभी-कभी ऐसे वर्णों को संशोधित करने के लिए जाने जाते हैं। ये वर्ण "{", "}", "|", "\", "^", "~", "[", "]", और "` "हैं।

+0

@Terrapin मुझे कुछ अवांछित वर्णों को फ़िल्टर करने की आवश्यकता है जो मुझे एन्कोड करने की आवश्यकता नहीं है। कृपया –

+0

का सुझाव दें यदि आप खराब वर्णों को पूरी तरह से फ़िल्टर करना चाहते हैं, तो आपको नियमित अभिव्यक्तियों का उपयोग करना होगा। यदि आप उन पात्रों को सुरक्षित रूप से (एन्कोड) करना चाहते हैं, तो URL एन्कोडिंग का उपयोग करें। – Seibar

+0

@Terrapin। मैंने खाली स्ट्रिंग के साथ इस (-^{} []; $ = * '# | @ '\ <>() +, \\) को प्रतिस्थापित करने के लिए लिखा है। कृपया जांचें कि यह सही है –

2

http://en.wikipedia.org/wiki/Query_string#URL_encoding

देखें में अवांछित तार दर्ज करने के लिए हैकर्स से दूर रहना चाहते हैं: http://tools.ietf.org/html/rfc3986#section-2.2

+0

मैं पूछता हूं कि मुझे किन तारों की आवश्यकता है –

+0

को अवरुद्ध करने के लिए यह अभी भी एक संदर्भ के रूप में मूल्यवान है। जोड़ा आरएफसी। – annakata

3

मैं के रूप में जवाब कहा है, अक्षर हैं जो vulnerablities

आप कोर्स जरूरत URL एन्कोड करने की अच्छी तरह से कारण को रोकने के लिए की जरूरत है। लेकिन यूआरएल-एन्कोडिंग कारण भेद्यता है? आमतौर पर सीधे नहीं; अप्रत्याशित वर्ण इनपुट होने पर अधिकांशतः यह आपके एप्लिकेशन को तोड़ देता है।

हम वेब 'कमजोरियों', सबसे आम लोगों को आज कर रहे हैं के बारे में बात कर रहे हैं:

  1. सर्वर साइड code injection, अपने सर्वर
  2. SQL injection समझौता, अपने डेटाबेस
  3. एचटीएमएल इंजेक्शन समझौता किए, अपने उपयोगकर्ताओं के खिलाफ cross-site scripting (XSS) हमलों की अनुमति
  4. अनधिकृत कार्रवाइयां, cross-site request forgery (XSRF) आपके उपयोगकर्ताओं के विरुद्ध हमलों की अनुमति देता है

ये गंभीरता को कम करने और सामान्यता में वृद्धि के क्रम में हैं। (सौभाग्य से कुछ वेब साइट लेखक इन दिनों सिस्टम इनपुट() में उपयोगकर्ता इनपुट पास करने के लिए पर्याप्त बेवकूफ हैं, लेकिन एक्सएसएस और एक्सएसआरएफ भेद्यताएं हैं।)

इन भेद्यताओं में से प्रत्येक को अंतर्निहित समस्या को समझने और जानबूझकर इसका सामना करने की आवश्यकता है । "तारों को अवरुद्ध करने की आवश्यकता" की कोई जादू सूची नहीं है जो सुरक्षा के बारे में भद्दा खेल रहा है, तो आपके आवेदन की रक्षा करेगा। वहाँ कुछ ऐड-ऑन स्ट्रिंग '< स्क्रिप्ट>' अवरुद्ध जब प्रस्तुत करने जैसी चीज़ें हैं, लेकिन सभी वे तुम्हें देने के सुरक्षा की झूठी भावना है, क्योंकि वे केवल कुछ ही आम मामलों पकड़ कर सकते हैं, और आमतौर पर कोड करने के लिए आसान कर रहे हैं चारों ओर।

वे उन तारों को भी रोक देंगे जब आप वास्तव में उन्हें चाहते हैं। उदाहरण के लिए, कुछ (बेवकूफ) PHP लेखकों ने सभी आने वाले apostrophes को SQL-इंजेक्शन को रोकने के प्रयास के रूप में मना कर दिया है; नतीजा यह है कि आपको "O'Reilly" नहीं कहा जा सकता है। डी 'ओह। ब्लॉक मत करो; ठीक से एन्कोड करें।

उदाहरण एसक्यूएल इंजेक्शन के खिलाफ की रक्षा करने के लिए बनाने के लिए यकीन है कि किसी भी तार है कि आप के साथ प्रश्नों बना रहे हैं एसक्यूएल-बच (या parameterised प्रश्नों का उपयोग स्वचालित रूप से ऐसा करने के लिए) के लिए; एचटीएमएल इंजेक्शन के खिलाफ सुरक्षा के लिए, पृष्ठ पर आउटपुट किए गए सभी टेक्स्ट स्ट्रिंग्स को HTML-एन्कोड करें (या एक टेम्पलेटिंग/एमवीसी योजना का उपयोग करें जो स्वचालित रूप से ऐसा करेगा)।

मेरे नमूना यूआरएल http://localhost/add.aspx?id=4;req=4

वहाँ कुछ है कि यूआरएल के साथ गलत माना जाता है? यह के साथ दो क्वेरी पैरामीटर अलग करने के लिए मान्य है एक ',' 'आम' & 'है, लेकिन कई आम वेब चौखटे के बजाय खेदजनक ढंग से अभी भी (जावा सर्वलेट और ASP.NET सहित) डिफ़ॉल्ट रूप से इस वाक्य रचना समझ में नहीं आता। तो अगर आप के साथ जाना होगा 'आईडी = 4 & अनुरोध = 4' - या, क्या तुम सच में लगता है कि उस में एक शाब्दिक अर्धविराम, 'id = 4% 3Breq% 3D4' के साथ एक एकल पैरामीटर बनना चाहता था अगर।

-2

मैं यह लिखा, सुंदर यूआरएल के लिए है, लेकिन इसकी निश्चित रूप से

पूरा नहीं "" ", ',', ·,,, *, @,, =,;,:।,, /, +, &, $, <,>, #,%, {, (,),}, |, \, ^, ~, [,], -, -, - ', "

और फिर मैं "के लिए और दोहरा रिक्त स्थान" रिक्त स्थान "का अनुवाद -"

बेहतर बात यह करना या किसी को भी इस सवाल का जवाब जब तक