Data Validation Example

Data Validation Example – Last Section में हमने WordPress द्वारा Provided विभिन्न प्रकार के Data Validation व Sanitization API Functions के बारे में जाना। इनके अलावा WordPress हमें और भी कई API Functions Provide करता है, जिनका प्रयोग Data Validation व Sanitization के लिए किया जाता है।

लेकिन केवल Functions के बारे में जान लेना ही पर्याप्त नहीं है, बल्कि किस प्रकार की जरूरत को पूरा करने के लिए किस Data Validation या Sanitization API Function को Use करना चाहिए, इस बात की भी उपयुक्त जानकारी होना बहुत जरूरी होता है। इस Concept को हम एक उदाहरण द्वारा समझने की कोशिश करते हैं। मानलो किस हमारे किसी Plugin में निम्नानुसार Plugin Code लिखा गया है:

<?php
/*
 *Plugin Name: Registration
 *Plugin URI: https://www.bccfalna.com/wpplugins/registration/
 *Description: Registration Form
 *Author: Kuldeep Chand
 *Version: 1.0
 *Author URI: https://www.bccfalna.com/
 */

add_shortcode('Register', 'register_ui_function');
function register_ui_function(){
	if(isset($_REQUEST['submit'])){
		check_admin_referer('nonce_action', 'nonce_name');
		$username = $_REQUEST['yourname'];
		$email = $_REQUEST['youremail'];
	}
?>

<form method="get" action=""> 
Name: <input type="text" name="yourname" value="<?php echo $username; ?>" /><br>
Email: <input type="text" name="youremail" value="<?php echo $email; ?>" />
<input type="submit" name="submit" value="Register">
<?php wp_nonce_field('nonce_action', 'nonce_name'); ?>
</form>

<?php
}

जब हम इस Plugin के Shortcode को अपने WordPress Page/Post में Use करते हैं, तो हमें निम्न चित्रानुसार एक Registration Form दिखाई देता है, जिस पर दो Text Input Elements व एक Submit Button Exist है:

Data Validation Example - Data Sanitization in Hindi

हालांकि पहली नजर में देखने पर ये Form हमें एक Normal Form की तरह ही दिखाई पडता है। लेकिन इस Form में कुछ परेशानी है क्योंकि इससे कुछ Security Issues Trigger हो सकते हैं। कैसे\ चलिए! समझने की कोशिश करते हैं।

इस Form की सबसे बडी परेशानी ये है कि हमने इस Form से Web Server पर आने वाले Inputs को Validation के लिए Check नहीं किया है न ही इस Form द्वारा Generate होने वाले Output को Sanitize किया है। अन्‍य शब्दों में कहें तो:

  • हमने हमारे Plugin में इस बात को Check नहीं किया है कि Form से आने वाला Username वास्तव में एक सही User Name ही है न ही हमने ये Check किया है कि Input के रूप में प्राप्त होने वाला Email Address Valid है या नहीं।
  • इसी तरह से हमने हमारे Current Plugin के Form में इस बात को बिना Check किए हुए कि Output के रूप में Display होने वाला String हमारे Form को कहीं Break तो नहीं कर देगा, हमने Display होने के लिए Print कर दिया है।

इस Form द्वारा Trigger हो सकने वाले Security Holes को समझने के लिए हम इस Form के Username Filed में निम्नानुसार तीन तरीकों से नाम Input करते हैं:

Data Validation Example - Data Sanitization in Hindi

जैसे ही हम इस तरह से Double Quoted String के साथ Name Field को Specify करते हुए “Register” Button पर Click करते हैं, हमारे सामने निम्न चित्रानुसार Output Display होता है:

Data Validation Example - Data Sanitization in Hindi

इस Output द्वारा हम समझ सकते हैं कि क्योंकि हमने Input किए गए Data को उपयुक्त तरीके से Validate व Sanitize नहीं किया है, इसलिए Register Button को Click करने के बाद हमें Name Field में वही Text दिखाई नहीं देताए जो हमने Register Button पर Click करने से पहले Input किया था।

हालांकि एक User के रूप में हमने Name Field में कोई Malicious Data Input नहीं किया था, फिर भी हमें उपयुक्त Output प्राप्त नहीं हो रहा है, क्योंकि हमारे Plugin में Input किए गए Data को Sanitize करके Display नहीं किया गया है। लेकिन इस Registration Form के Name Field में कोई User निम्नानुसार Malicious Data भी Input कर सकता है:

    Kuldeep “/> Password: <input name=”password” value=”123456″

यदि User हमारे Plugin के Form के Name Field में उपरोक्तानुसार Text Input कर दे, तो हमें प्राप्त होने वाला Output कुछ निम्नानुसार दिखाई देने लगता है, जिसमें एक और Input Element Add हो गया है, जो कि किसी भी स्थिति में वांछित नहीं है:

Data Validation Example - Data Sanitization in Hindi

यानी पिछले दोनों तरीकों के Input में Double Quotes का प्रयोग किया गया है और WordPress के किसी भी Form में बिना Validation व Sanitization किए हुए Double Quotes का प्रयोग करने पर हमारा HTML Form Break हो जाता है, जैसाकि पिछले दोनों Output द्वारा हम समझ सकते हैं। इन दोनों तरीकों के अलावा एक User हमारे Form के Input Field में निम्नानुसार एक JavaScript Content भी Input कर सकता है:

        “<script> alert(‘XSS’); </script>”

जो कि Cross Site Scripting का एक Example है। इस प्रकार के Security Issues को रोकने के लिए जरूरी है कि जो भी Data Input के रूप में किसी भी माध्‍यम से Web Server पर Request के रूप में Retrieve हो, उसे Accuracy के लिए Validate किया जाए और जो भी Data हमें Output के रूप में Web Page पर Display करना हो, उसे Sanitize करने के बाद ही Display किया जाए।

चूंकि उपरोक्त Discussion के आधार पर हम समझ सकते हैं कि $_GET, $_POST या $_REQUEST Global Array में जो Data Web Server पर Retrieve होता है, हम उस पर किसी भी स्थिति में पूरी तरह से वि”वास नहीं कर सकते कि उसमें Malicious Data नहीं होगा। साथ ही कभी भी इन Global Array को Directly Sanitize या Validate नहीं करना चाहिए, बल्कि जरूरत के अनुसार इनके Parameters को अलग-अलग Retrieve करके Sanitize करना चाहिए। जैसे:

function register_ui_function(){
	if(isset($_REQUEST['submit'])){
		check_admin_referer('nonce_action', 'nonce_name');
		$username = $_REQUEST['yourname'];
		$email = $_REQUEST['youremail'];
		$age = absint($_REQUEST['yourage']);
	}
?>

<form method="get" action=""> 
Name: <input type="text" name="yourname" value="<?php echo $username; ?>" /><br>
Age: <input type="text" name="yourage" value="<?php echo $age; ?>" /><br>
Email: <input type="text" name="youremail" value="<?php echo $email; ?>" />
<input type="submit" name="submit" value="Register">
<?php wp_nonce_field('nonce_action', 'nonce_name'); ?>
</form>

<?php
}

इस Code में हमने Age Retrieve करने के लिए एक और Input Element Add किया है। साथ ही जब Register Button पर Click किया जाता है, उसके बाद Web Server पर पहुंचने वाले ।हम Parameter को निम्नानुसार Statement द्वारा Retrieve करके $age नाम के Variable में Store किया है। साथ ही Age को absint() API Function का प्रयोग करके Integer Value में Convert भी किया है:

        $age = absint($_REQUEST[yourage]);

इसलिए यदि User Form पर दिखाई देने वाले Age Text Box में कोई गलत Data भी Input करता है, तो absint() API Function उस गलत Data को Absolute Integer में Convert करने के बाद ही $age Variable में Store करता है। जिससे ये बात निश्चित हो जाती है कि $age Variable में एक Numerical Value ही होगी] फिर भले ही User ने Age के Text Field में कोई Character Data ही Input क्यों न किया हो। जैसे:

हम देख सकते हैं कि Age Field में हमने “31 year” मान Input किया है। लेकिन जब हम “Register” Button पर Click करते हैं, तो निम्न Statement Execute होता है:

        $age = absint($_REQUEST[yourage]);

परिणामस्वरूप $age में केवल “31” ही Store होता है। यानी “31 year” से “ year” को Ignore कर दिया जाता है। परिणामस्वरूप “Register” Button पर Click करने पर हमें निम्नानुसार Output प्राप्त होता है, जिसमें ।हम Field में “ year” String नहीं होता:

जब हम ळसवइंस ।ततंल से उपरोक्तानुसार तरीके से $नेमतदंउम, $ंहम व $मउंपस जैसे डनसजपचसम टंतपंइसमे में च्ंतंउमजमते को ैजवतम करते हैं, तब कई बार इन्हें उपयुक्त तरीके से ।बबमे करना काफी मुि”कल हो जाता है। इसलिए डनसजपचसम टंतपंइसमे क्मबसंतम करने के स्थान पर च्भ्च् में सामान्‍यत: एक ।ततंल का प्रयोग कर लिया जाता है क्योंकि च्भ्च् हमें किसी ।ततंल को विभिन्न तरीकों से भ्ंदकसम करने के लिए बहुत सारे ब्वतम थ्नदबजपवदे Provide करता है। इस ब्वदबमचज को समझने के लिए हम हमारे पिछले Plugin ब्वकम को ही निम्नानुसार फिर से डवकपलि कर सकते हैं:

function register_ui_function(){
	$clean = array();
	
	if(isset($_REQUEST['submit'])){
		check_admin_referer('nonce_action', 'nonce_name');
		$clean['username'] = $_REQUEST['yourname'];
		$clean['email'] = $_REQUEST['youremail'];
		$clean['age'] = absint($_REQUEST['yourage']);
	}
?>

<form method="get" action=""> 
Name: <input type="text" name="yourname" value="<?php echo $clean['username']; ?>" /><br>
Age: <input type="text" name="yourage" value="<?php echo $clean['age']; ?>" /><br>
Email: <input type="text" name="youremail" value="<?php echo $clean['email']; ?>" />
<input type="submit" name="submit" value="Register">
<?php wp_nonce_field('nonce_action', 'nonce_name'); ?>
</form>

<?php
}

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

    $clean = array();

और फिर इस ।ततंल में टंतपंइसमे के स्थान पर ।ेवबपंजपअम ज्ञमले के साथ विभिन्न त्मुनमेज च्ंतंउमजमते को ।ेपहद किया है:

        $clean[username] = $_REQUEST[‘yourname’];
        $clean[email] = $_REQUEST[‘youremail’];
        $clean[age] = absint($_REQUEST[‘yourage’]);

इस प्रकार के Input के रूप में जब कोई Positive Integer Value को Retrieve करते हुए उसके साथ Processing करना होता है, तब हमें हमेंशा intval(), abs या absint() जैसे किसी PHP या WordPress API Function को Use करते हुए Data Validation करना चाहिए व Appropriate Data Conversion के बाद ही उसके साथ Processing करनी चाहिए। यानी कभी भी User Input पर भरोसा नहीं करना चाहिए कि वह उसी Type का व उसी Format में Data Input करेगा, जिसमें हम Assume कर रहे हैं।

WordPress in Hindi - BccFalna.comये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Advance WordPress in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।

Advance WordPress in Hindi | Page: 835 | Format: PDF

BUY NOW GET DEMO REVIEWS

Working on CCAvenue Payment Gateway Integration Dismiss