2011-04-08 18 views
20

मेरे पास मेरी कंपनी की वेबसाइट पर एक प्रतियोगिता प्रविष्टि पृष्ठ है। प्रतियोगिता में प्रवेश करने के लिए, आप एक लॉगिन बनाते हैं, जो सिर्फ एक ईमेल और एक 4-पिन पिन है।क्या ऐसे ब्राउज़र हैं जो अधिकतम लम्बाई का समर्थन नहीं करते हैं?

<input type="password" name="contest_pin" id="contest_pin" maxlength="4" /> 

उपयोगकर्ताओं प्रपत्र सबमिट करते हैं, खाते हमारे डेटाबेस में बनाया जाता है, और फिर वे एक ईमेल (जो मैं पर कॉपी कर रहा हूँ) मिल उस ईमेल पते और पिन वे बनाए गए होते हैं: यहाँ पिन क्षेत्र हैं।

यहां समस्या है: मैक पर सफारी/क्रोम/फ़ायरफ़ॉक्स, लिनक्स पर क्रोम/फ़ायरफ़ॉक्स, विंडोज़ पर आईई 7/8/9) में मैं उस पिन फ़ील्ड में 4 से अधिक अंकों को दर्ज नहीं कर सकता हूं। और फिर भी, मुझे प्राप्त हुए कई ईमेल दिखाते हैं कि उपयोगकर्ता ने 4 से अधिक वर्णों के साथ एक पिन बनाया है।

यह कैसे संभव है? क्या ऐसे ब्राउज़र हैं जो अधिकतम लम्बाई का समर्थन नहीं करते हैं? मैंने ओपेरा, या किसी भी मोबाइल ब्राउज़र पर परीक्षण नहीं किया है। यदि उनका पिन 4 अंकों से अधिक लंबा है तो यह एक बड़ा सौदा नहीं है; डेटाबेस और स्वीकार करेगा। मैं बस सोच रहा हूं कि वे कैसे अधिकतम लम्बाई प्राप्त करने में कामयाब रहे।

संपादित जोड़ने के लिए

भी कई जवाब मूल रूप से एक ही बात मुझे व्यक्तिगत रूप से उनमें से सभी का जवाब देने के लिए कह रहे हैं। मुझे पता है कि मुझे हमेशा किसी भी महत्वपूर्ण के लिए सर्वर-साइड सत्यापन करना चाहिए, और हमारे पास हमारे डेटा को स्वच्छ करने के लिए PHP कोड है, और यदि यह बेहद महत्वपूर्ण था तो मेरे पास 4-अंकों की सीमा लागू करने वाला PHP कोड भी होगा। यह हमारे लिए इतना महत्वपूर्ण नहीं है कि वे केवल 4 अक्षर हों, इसलिए मैंने इसे लागू नहीं किया है। मैं बस सोच रहा हूं कि अधिकतम लम्बाई संपत्ति ऐसा क्यों नहीं कर रही है जो इसे करने के लिए डिज़ाइन की गई है, जो उपयोगकर्ताओं को कुछ निश्चित वर्णों से अधिक दर्ज करने से रोकती है। आप में से उन लोगों के लिए जिन्होंने दुर्भावनापूर्ण स्क्रिप्ट या फ़ायरबग का सुझाव दिया है, मैं 100% निश्चित हो सकता हूं कि यह मामला नहीं है। हमारी साइट के केवल पंजीकृत उपयोगकर्ता (जो कि एक बहुत ही विशिष्ट कॉर्पोरेट सदस्यता सूची तक सीमित है) प्रतियोगिता प्रतियोगिता पृष्ठ तक भी पहुंच सकते हैं, और मैं गारंटी दे सकता हूं कि उस सूची में लगभग 100 लोग जानबूझकर किसी को रोकने की कोशिश कर रहे हैं इनपुट प्रकार संपत्ति।

+0

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

+0

maxlength = "x" मैक (क्रोम और फ़ायरफ़ॉक्स की कोशिश की गई) पर काम नहीं करता है जब आपके पास टाइप = "संख्या" विशेषता शामिल होती है :) –

+0

@ मिंडागास बर्नटाविचियस, ऐसा इसलिए है क्योंकि आपको 'अधिकतम' और' मिनट 'या' श्रेणी 'का उपयोग करने की आवश्यकता है 'प्रकार = संख्या' के लिए गुण। –

उत्तर

7

मुझे विश्वास है कि हर ब्राउज़र इसका समर्थन करता है, यहां संदर्भ के लिए कुछ लिंक है:

Maxlength | SitePointReference

Maxlength | W3 Schools

जाहिर है कर रहे हैं जिस तरह से चारों ओर इस - क्या आप यह सुनिश्चित करना चाहिए हमेशा पर्याप्त सर्वर है -साइड सत्यापन, क्योंकि क्लाइंट-साइड आमतौर पर इसके लिए पर्याप्त नहीं है।

+11

बस एक नोट: w3schools को आमतौर पर प्रोग्रामिंग/वेब विकास से संबंधित जानकारी के लिए उप-पैरा संसाधन माना जाता है। कहीं और उस जानकारी को सत्यापित करना हमेशा एक अच्छा विचार है। – MikeTheLiar

16

वे बहुत सारे संभावित क्षेत्र हैं जो फ़ील्ड नाम पढ़ते हैं और सामान्य मानव उपयोगकर्ता की तरह HTML फॉर्म का उपयोग करने के बजाय उन लोगों के आधार पर जीईटी और POST अनुरोध बनाते हैं।

यही कारण है कि डेटा के सही होने के लिए क्लाइंट-साइड सत्यापन फॉर्म पर्याप्त नहीं है। क्लाइंट-साइड सत्यापन अच्छा है क्योंकि यह अंतिम उपयोगकर्ताओं के लिए उत्तरदायी है, लेकिन यह खराब डेटा को आपके सर्वर के दरवाजे पर आने से रोकने में सक्षम नहीं है।

उदाहरण के तौर पर, मान लें कि मेरे पास एक ऐसे फॉर्म में एक इनपुट फ़ील्ड है जिसका कार्य प्राप्त हो गया है। मेरा इनपुट फ़ील्ड का अधिकतम लम्बाई 4 है। जब मैं सबमिट दबाता हूं, तो मुझे ?field=1234 के साथ समाप्त होने वाला यूआरएल दिखाई देता है। उस URL को ?field=123456789 पर अपडेट करने और एंटर दबाकर मुझे रोकने के लिए कुछ भी नहीं है। POST क्रियाओं के साथ समान चीजें की जा सकती हैं, लेकिन ऐसा करने के लिए एक उपकरण की आवश्यकता है।

+7

फायरबग जैसे टूल का उपयोग करके, मैं अधिकतम लम्बाई को हटाने के लिए साइट के एचटीएमएल को संपादित कर सकता हूं। – m4tt1mus

+3

न केवल बॉट्स, मैं पुराने ब्राउज़र में विश्वास करता हूं कि अधिकतम टेक्स्ट को अधिकतम सीमा को बाईपास करना संभव था। –

1

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

3

सभी ब्राउज़र अधिकतम लम्बाई का समर्थन करते हैं। हालांकि, इस विशेषता को आसानी से हटाया जा सकता है/डीओएम विधियों का उपयोग करके बदला जा सकता है, उदाहरण के लिए, फ़ायरफ़ॉक्स के वेब डेवलपर टूलबार के साथ।

3

मुझे प्राप्त हुए कई ईमेल दिखाते हैं कि उपयोगकर्ता ने 4 से अधिक वर्णों के साथ एक पिन बनाया है।

यह कैसे संभव है? क्या ऐसे ब्राउज़र हैं जो अधिकतम लम्बाई का समर्थन नहीं करते हैं?

मैं उन उपयोगकर्ता गतिविधियों से संबंधित USER_AGENT और REFERER शीर्षलेख की जांच करूंगा। शायद एक दुर्भावनापूर्ण उपयोगकर्ता प्रोग्राम परिधीय रूप से आपके परिधि रक्षा की जांच करने के लिए ब्राउज़र प्रतिबंधों को बाधित करता है। यदि ऐसा है तो आपको वहां कुछ पैटर्न देखना चाहिए।

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

3

सामान्य रूप से, उपयोगकर्ता इनपुट किए गए क्लाइंट-साइड के नियमों को लागू करने का प्रयास करना एक बुरा विचार है। मेरे पास एक ऐसा अनुभव था जहां हमने कुछ प्रोग्रामर को कुछ काम सौंपा था और उपयोगकर्ता इनपुट को स्वच्छ करने का उनका विचार यह था कि उपयोगकर्ता किसी दिए गए क्षेत्र में 10 से अधिक वर्ण इनपुट नहीं कर सके। एक त्वरित फायरबग परिवर्तन और, ओह देखो, मैं सर्वर के डेटाबेस को कुछ न्यूनतम एसक्यूएल इंजेक्शन के साथ छोड़ सकता हूं।

यदि मैं आप थे तो मैं अधिकतम लंबाई की जांच करता हूं, जो भी स्क्रिप्ट आपके डेटाबेस में उपयोगकर्ता की जानकारी जोड़ती है और उपयोगकर्ता इनपुट अधिकतम निर्दिष्ट लंबाई से अधिक होने पर फॉर्म सत्यापन त्रुटियों को वापस कर देता है।