जैसा कि दूसरों ने कहा है, आपको दोनों करना चाहिए। यहाँ पर क्यों:
ग्राहक की ओर
आप पहले ग्राहक की ओर से इनपुट को मान्य करना चाहते हैं क्योंकि आप औसत उपयोगकर्ता को बेहतर प्रतिक्रिया दे सकते हैं । उदाहरण के लिए, यदि वे एक अमान्य ईमेल पता दर्ज करते हैं और अगले फ़ील्ड पर जाते हैं, तो आप तुरंत एक त्रुटि संदेश दिखा सकते हैं। इस तरह उपयोगकर्ता फॉर्म जमा करने से पहले हर क्षेत्र को सही कर सकता है।
यदि आप केवल सर्वर पर मान्य हैं, तो उन्हें फ़ॉर्म जमा करना होगा, त्रुटि संदेश प्राप्त करना होगा, और समस्या का शिकार करने का प्रयास करना होगा।
(सर्वर द्वारा उपयोगकर्ता के मूल इनपुट के साथ फ़ॉर्म को फिर से प्रस्तुत करने से इस दर्द को कम किया जा सकता है, लेकिन क्लाइंट-साइड सत्यापन अभी भी तेज है।)
सर्वर साइड
आप सर्वर की ओर से मान्य करना चाहते हैं क्योंकि आप दुर्भावनापूर्ण उपयोगकर्ता से सुरक्षा कर सकते हैं , जो आसानी से आपके जावास्क्रिप्ट को बायपास कर सकते हैं और सर्वर को खतरनाक इनपुट सबमिट कर सकते हैं।
अपने यूआई पर भरोसा करना बहुत खतरनाक है। न केवल वे आपके UI का दुरुपयोग कर सकते हैं, लेकिन वे आपके UI का उपयोग नहीं कर सकते हैं, या यहां तक कि एक ब्राउज़र भी । क्या होगा यदि उपयोगकर्ता मैन्युअल रूप से URL को संपादित करता है, या अपनी स्वयं की जावास्क्रिप्ट चलाता है, या किसी अन्य टूल के साथ अपने HTTP अनुरोधों को घुमाता है? क्या होगा यदि वे curl
उदाहरण के लिए या स्क्रिप्ट से कस्टम HTTP अनुरोध भेजते हैं ?
( यह सैद्धांतिक नहीं है; उदाहरण के लिए, मैंने एक ट्रैवल सर्च इंजन पर काम किया है, जिसने कई पार्टनर एयरलाइंस, बस कंपनियों आदि के लिए उपयोगकर्ता की खोज को फिर से सबमिट किया है, POST
जैसे कि उपयोगकर्ता ने प्रत्येक कंपनी के खोज फॉर्म को भरा था, फिर इकट्ठा किया और सॉर्ट किया गया सभी परिणाम। उन कंपनियों के फॉर्म JS को कभी निष्पादित नहीं किया गया था, और यह हमारे लिए महत्वपूर्ण था कि वे लौटे HTML में त्रुटि संदेश प्रदान करते हैं। बेशक, एक एपीआई अच्छा होता, लेकिन यह हमें करना था। )
इसके लिए अनुमति नहीं देना न केवल सुरक्षा के दृष्टिकोण से भोला है, बल्कि गैर-मानक भी है: एक ग्राहक को जो भी वे चाहते हैं, उसके द्वारा HTTP भेजने की अनुमति दी जानी चाहिए, और आपको सही तरीके से जवाब देना चाहिए। जिसमें मान्यता शामिल है।
संगतता के लिए सर्वर साइड सत्यापन भी महत्वपूर्ण है - सभी उपयोगकर्ता नहीं, भले ही वे एक ब्राउज़र का उपयोग कर रहे हों, जावास्क्रिप्ट सक्षम होगा।
परिशिष्ट - दिसंबर २०१६
कुछ सत्यापन हैं जो सर्वर-साइड एप्लिकेशन कोड में भी ठीक से नहीं किए जा सकते हैं, और क्लाइंट-साइड कोड में पूरी तरह से असंभव हैं , क्योंकि वे डेटाबेस की वर्तमान स्थिति पर निर्भर करते हैं। उदाहरण के लिए, "किसी और ने उस उपयोगकर्ता नाम को पंजीकृत नहीं किया है", या "जिस ब्लॉग पोस्ट पर आप अभी भी टिप्पणी कर रहे हैं वह मौजूद है", या "कोई मौजूदा आरक्षण आपके द्वारा अनुरोधित तिथियों को ओवरलैप नहीं करता है", या "आपके खाते का शेष अभी भी उस खरीद को कवर करने के लिए पर्याप्त है।" । " केवल डेटाबेस भरोसेमंद रूप से डेटा को मान्य कर सकता है जो संबंधित डेटा पर निर्भर करता है। डेवलपर्स नियमित रूप से इसे बढ़ाते हैं , लेकिन PostgreSQL कुछ अच्छे समाधान प्रदान करता है ।