2008-10-07 14 views
9

जब आप जीईटी अनुरोधों का उपयोग कर अपनी साइट के माध्यम से चर पारित कर रहे हैं, तो क्या आप उन्हें उपयोग करने से पहले (नियमित अभिव्यक्तियां, फ़िल्टर इत्यादि) मान्य करते हैं?क्या आप अपने यूआरएल चर मान्य करते हैं?

कहें कि आपके पास URL http://www.example.com/i=45&p=custform है। आप जानते हैं कि "मैं" हमेशा एक पूर्णांक होगा और "पी" में हमेशा अक्षर और/या संख्याएं होंगी। क्या यह सुनिश्चित करने के लिए समय है कि किसी ने मूल्यों में हेरफेर करने का प्रयास नहीं किया है और फिर पृष्ठ को पुनः सबमिट कर लिया है?

उत्तर

41

हां। बिना किसी संशय के। उपयोगकर्ता इनपुट पर भरोसा न करें।

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

हालांकि, इनपुट हमेशा सर्वर साइड पर मान्य किया जाना चाहिए के बाद से उपयोगकर्ता सिर्फ प्राप्त URL में मैन्युअल रूप से इनपुट डेटा बदलने के लिए या गढ़ी पोस्ट डेटा भेज सकते हैं।

सबसे बुरी स्थिति परिदृश्य में आप SQL injection, या इससे भी बदतर, XSS भेद्यता के साथ समाप्त कर सकते हैं।

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

  • कहें कि आप जानते हैं कि यह एक पूर्णांक है, int.Parse का उपयोग करें या regex "^ \ d + $" के खिलाफ इसे मेल करें।
  • यदि यह एक स्ट्रिंग है और विकल्प सीमित हैं, तो एक शब्दकोश बनाएं और इसके माध्यम से स्ट्रिंग चलाएं। यदि आपको कोई मिलान नहीं मिलता है तो स्ट्रिंग को डिफ़ॉल्ट में बदल दें।
  • यदि यह एक उपयोगकर्ता निर्दिष्ट स्ट्रिंग है, यह की तरह "^ \ w + $"
+0

दमनित। एकमात्र सही उत्तर और मुझे इसे देने में बहुत देर हो चुकी है। – Will

+0

बिल्कुल ... यदि आप – jochil

+0

+1 एसक्यूएल इंजेक्शन, क्रॉस साइट स्क्रिप्टिंग और अमान्य डेटा मैनिपुलेशन नहीं करते हैं तो यह लापरवाह है। सभी इनपुट मान्य करने के कारणों का एक cornucopia! Http://thedailywtf.com/Articles/Oklahoma-Leaks-Tens-of-hhousands-of- सामाजिक- सुरक्षा- नर्स ,- अन्य- संवेदनशील- डेटा.एएसपीएक्स सबसे डरावनी उदाहरण के लिए देखें। –

4

किसी भी उपयोगकर्ता इनपुट यह अत्यंत महत्वपूर्ण सुनिश्चित करने के लिए जाँच करने के लिए है के रूप में एक सख्त regex के खिलाफ मेल खाते हैं यह आप क्या अपेक्षा है यह है। तो हाँ!

4

हाँ, हाँ, और तीन बार हां।

कई वेब चौखटे निश्चित रूप से आप के लिए यह करना होगा, जैसे, Struts 2.

3

एक महत्वपूर्ण कारण sql injection के लिए जाँच करने के लिए है। तो हाँ, हमेशा उपयोगकर्ता इनपुट को स्वच्छ करें।

+0

एसक्यूएल इंजेक्शन केवल इनपुट के पास नहीं, एसक्यूएल (उदा। पैरामीटर, तैयार कथन) के करीब संभाला जाना चाहिए। क्या आप नामित व्यक्तियों को अस्वीकार करेंगे: O'Reilly? – Erik

+0

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

0

हां, उन्हें जितनी अच्छी तरह से कर सकते हैं उन्हें जांचें। PHP में मैं हमेशा प्रकारों की जांच करता हूं (IsInt(i), IsString(p))।

2

न कि अन्य लोग क्या कह रहे हैं। एनसी नामक एक क्वेरीस्ट्रिंग वैरिएबल की कल्पना करें, जिसे 10, 50 और 100 के मान होने के लिए देखा जा सकता है जब उपयोगकर्ता क्रमश: 10, 50 और 100 परिणाम प्रति पृष्ठ का चयन करता है। अब कल्पना करें कि इसे 50000 में बदलने वाला कोई व्यक्ति है। अगर आप इसे पूर्णांक होने के लिए जांच रहे हैं, तो आप प्रति पृष्ठ 50000 परिणाम दिखाएंगे, जो आपके पृष्ठदृश्य, सर्वर लोड, स्क्रिप्ट टाइम्स आदि को प्रभावित करेंगे। इसके अलावा यह आपका पूरा डेटाबेस हो सकता है। जब आपके पास ऐसे नियम होते हैं (प्रति पृष्ठ 10, 50 या 100 परिणाम), तो आपको यह देखने के लिए अतिरिक्त जांच करनी चाहिए कि क्या एनआर का मान केवल 10, 50 या 100 है, और यदि नहीं, तो इसे डिफ़ॉल्ट पर सेट करें। यह केवल एक मिनट (एनसी, 100) हो सकता है, इसलिए यह काम करेगा यदि एनसी 25, 75 और इतने पर बदल दिया गया है, लेकिन 100 से ऊपर कुछ भी देखे जाने पर डिफ़ॉल्ट रूप से 100 हो जाएगा।

1

मैं इस बात पर जोर देना चाहता हूं कि यह कितना महत्वपूर्ण है ये है। मुझे पता है कि पहला जवाब एसक्यूएल इंजेक्शन और एक्सएसएस भेद्यता पर चर्चा करता है।एसक्यूएल इंजेक्शन में नवीनतम रैव क्वेरी स्ट्रिंग्स में एक बाइनरी एन्कोडेड एसक्यूएल कथन पास कर रहा है, जो अगर इसे एसक्यूएल इंजेक्शन होल पाता है, तो यह आपके डेटाबेस में प्रत्येक टेक्स्ट फ़ील्ड में http: //reallybadsite.com'/> जोड़ देगा।

वेब डेवलपर्स के रूप में हमें सभी इनपुट को सत्यापित करना होगा, और सभी आउटपुट साफ़ करना होगा।

याद रखें कि हैकर आपकी साइट से समझौता करने के लिए IE का उपयोग नहीं करेगा, इसलिए आप वेब में किसी भी सत्यापन पर भरोसा नहीं कर सकते हैं।

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