5

क्या यह PHP इनपुट के साथ जेएस या सर्वर पक्ष के साथ सर्वर पर भेजे जाने से पहले उपयोगकर्ता इनपुट को मान्य करना बेहतर है? या हो सकता है कि दोनों सुरक्षित पक्ष पर रहें?उपयोगकर्ता इनपुट सत्यापन, क्लाइंट-साइड या सर्वर-साइड? [PHP/JS]

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

क्या मैं इसे 'if ... else' कथन का भार फेंक देता हूं जब तक उपयोगकर्ता इसे सही न हो जाए? या हो सकता है कि उपयोगकर्ता द्वारा दर्ज प्रत्येक मान के लिए अलग-अलग चर हों और इसे सही या गलत होने पर इसे सही या गलत पर सेट करें? (यह सुनिश्चित करने के लिए ई-मेल सत्यापन की तरह है कि यह एक ईमेल प्रारूप में है)

ऐसा करने के कई तरीके हैं, लेकिन आप कौन से सुझाव देंगे? मैं कोड की 50 लाइनों को लिखना नहीं चाहता हूं जब मैं 10 लाइनों में नौकरी कर सकता हूं ... अगर यह समझ में आता है: पी

किसी भी मदद की सराहना की जाएगी, धन्यवाद! :)

उत्तर

8

सर्वर-साइड सत्यापन एक चाहिए है, क्लाइंट-साइड सत्यापन एक प्लस है।

यदि आप केवल क्लाइंट-साइड सत्यापन का उपयोग करते हैं, तो घृणास्पद लोग आपके सिस्टम को अनधिकृत सामग्री पोस्ट करने के लिए हैक करेंगे - आपकी स्क्रिप्ट तोड़कर, और संभावित रूप से आपके सिस्टम का शोषण करेंगे। यह एक सुरक्षा दृष्टिकोण से बहुत खराब है।

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

तो, यदि संभव हो, दोनों का उपयोग करें। यदि आप नहीं कर सकते/नहीं करेंगे, तो कम से कम इसे सर्वर-साइड करें। ग्राहक-पक्ष-केवल सत्यापन आपदा के लिए एक नुस्खा है!

5

दोनों करें।

क्लाइंट पक्ष प्रतिक्रिया उपयोगकर्ताओं को उम्मीद करता है और सर्वर पक्ष आपके डेटा की सुरक्षा करता है।

मुझे यकीन है कि PHP में कुछ पुस्तकालय हैं जो आपको एएसपी.नेट एमवीसी एक कदम में दोनों करने का एक तरीका प्रदान करने में मदद करेगा।

4

सुरक्षा सत्यापन के लिए सर्वर सत्यापन पर निश्चित रूप से इनपुट सत्यापन होना चाहिए।

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

0

प्रमाणीकरण, हमेशा सर्वर की तरफ। मैं आपके फॉर्म क्लाइंट-साइड के साथ छेड़छाड़ कर सकता हूं और पागल मूल्यों को भर सकता हूं और अभी भी मान्य हो सकता हूं। मैं सर्वर-साइड स्क्रिप्ट के साथ छेड़छाड़ नहीं कर सकता।

तो क्लाइंट-साइड की जांच करते समय, आप सर्वर के साथ थोड़ी देर 'बात कर रहे हैं' बचा रहे हैं। असली के लिए अपने डेटा को प्रमाणित करने के लिए इसका कभी भी उपयोग न करें।

+2

मुझे wounder बनाता है आप एक जीवित रहने के लिए क्या करते हैं;) मैं समझता हूं कि आपकी कहानियां हालांकि, मैं बेहतर ढंग से सुनिश्चित करता हूं कि साइट जाने से पहले मैं सबकुछ मान्य करता हूं अब ive अब – Shogun

0

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

0

आपको सर्वर-पक्ष पर इसे सत्यापित करना चाहिए। क्लाइंट-साइड सत्यापन वैकल्पिक है। आप फ़ील्ड के लिए सत्यापन के प्रकार घोषित कर सकते हैं, और अपने रूपों के लिए सामान्य सत्यापनकर्ता बना सकते हैं। यदि आप नहीं जानते कि मेरा मतलब क्या है AngularJs घोषणात्मक कोड निर्माण को देखने का प्रयास करें। फॉर्म बनाने के लिए यह सबसे अच्छा तरीका है, अंगुलर भी फॉर्म बनाने के लिए अच्छा और बहुत तेज ढांचा है। इस लाइनों पर

http://angularjs.org/

http://docs.angularjs.org/#!/cookbook/advancedform

देखो:

<input type="text" name="form.address.line1" size="33" ng:required/> <br/> 
    <input type="text" name="form.address.city" size="12" ng:required/>, 
    <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:state"/> 
    <input type="text" name="form.address.zip" size="5" ng:required 
    validate="regexp:zip"/> 

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

उदाहरण:

फ़ॉर्म डेटा:

$formData = array (
    array(
    'ID' => "name", 
    'validate' => '/.+/', 
    'label' => 'Your name', 
    'errorMsg' => "This field is required", 
    'type' => 'text' 
    ), 
array(
     'ID' => "Phone number", 
     'validate' => '/^[0-9+ ]+$/', 
     'label' => 'Numer telefonu', 
     'errorMsg' => "Please provide proper telephone number", 
     'type' => 'text' 
     ) 
); 

सत्यापनकर्ता और (सरल और गन्दा कोड के लिए खेद है यहाँ) प्रपत्र जनरेटर:

$s = ''; 
foreach ($formData as $input){ 
    $s .= sprintf('<label for="%s">%s</label>',$input['ID'],$input['label']); 
    if (isset($_POST[$input['ID']]) && !empty($input['validate']) && !preg_match($input['validate'],$_POST[$input['ID']])){ 
     $error = true; 
     $s .= sprintf('<div class="formErrorValidate">%s</div>',$input['errorMsg']); 
    } 
    if (isset($_POST[$input['ID']])) $htmlMsg = str_replace('%'.$input['ID'].'%',$_POST[$input['ID']],$htmlMsg); 
    if ($input['type'] == 'textarea'){ 
     $s .= sprintf('<textarea name="%s" id="%s">%s</textarea>',$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } else { 
     $s .= sprintf('<input type="%s" name="%s" id="%s" value="%s"/>',$input['type'],$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } 

}

+0

मैंने कभी इस तरह से करने के बारे में सोचा नहीं है, यह एक फॉर्म उत्पन्न करने और मान्य करने का एक बहुत ही आसान तरीका है, उत्तर के लिए धन्यवाद :) – Shogun

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