Super Global Variables in PHP

Super Global Variable in PHP – $_SERVER नाम के Super Global Array में Current Web Server से सम्बंधित काफी महत्वपूर्ण जानकारियों होती हैं, जिन्हें Web Browser द्वारा आसानी से Access किया जा सकता है। जबकि Server की जानकारियों को आसानी से Access कर लेनाए उस पर Hosted Sites के लिए काफी Typical Security Issues पैदा कर सकता है। इसलिए हम किन Server Variables को Use कर रहे हैं, इस बात पर निर्भर करते हुए हमें उन्हें हमेंशा Sanitize करते हुए ही Use करना चाहिए।

उदाहरण के लिए यदि हम किसी Page पर Referring URL को Display करना चाहते हैं, जो कि Visitor को हमारी Site पर Refer कर देता है, तो इस जरूरत को पूरा करने के लिए हमें कभी भी निम्नानुसार तरीके से Super Global Array को Use नहीं करना चाहिए:

<?php if( isset( $_SERVER['HTTP_REFERER'] ) ) { ?>
  Welcome visitor from < ?php echo $_SERVER['HTTP_REFERER']; ?> !
<?php } ?>

क्योंकि referrer URL को काफी आसानी से Miss-Guide किया जा सकता है। इसलिए इसे हमेंशा esc_url() API Function का प्रयोग करते हुए Sanitize करके ही Specify किया जाना चाहिए। जैसे:

<?php if( isset( $_SERVER['HTTP_REFERER'] ) ) { ?>
  Welcome visitor from < ?php echo esc_url($_SERVER['HTTP_REFERER']); ?> !
<?php } ?>

इसी तरह से हम कभी भी $_SERVER[‘HTTP_USER_AGENT’] Variable में Stored User-Agent Signature पर भी भरोसा नहीं कर सकते। इसलिए यदि हम इसके Data को Display करना चाहते हैं, तो हमें इसे भी Unsafe Data की तरह ही Treat करते हुए wp_kses() API Function के माध्‍यम से Sanitize करने के बाद ही इसे उपयोग में लेना चाहिए।

इनके अलावा ज्यादातर Use किया जाने वाला Server Variable $_SERVER[‘REQUEST_URI’] या $_SERVER[‘PHP_SELF’] होता है, जिसमें Currently Loaded Page या Executed Script की Location का URL होता है। जब इसे Sanitize नहीं किया जाताए तो ये Server Variables काफी आसानी से Miss-Guide करते हुए इनका दुरूपयोग किया जा सकता है। उदाहरण के लिए जब हम कोई ऐसा HTML Form Create करते हैं, जिसके action Attribute में फिर से स्वयं उसी Page को Specify करना होता है, तो हम निम्नानुसार Statement लिखते हैं:

<form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
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>

यदि हम इस Form को register.php नाम की File में Save करें और Web Browser के Addressbar में निम्नानुसार URL Specify करें:

http://localhost/wp/register.php/”><script>alert(123123)</script>

तो हमें निम्नानुसार Output प्राप्त होता है:

Super Global Variable in PHP - Hindi

यानी यदि हम हमारे Form के Actual Attribute में उपरोक्तानुसार Hard Coaded Server Parameter Specify करते हैं, जो कि Current Page को Represent करता है, तो इस प्रकार के HTML Form को Trick किया जा सकता है।

इसलिए इस प्रकार की Tricking से बचने के लिए सबसे बेहतर तरीका यही है कि हम हमारे HTML Form के Action Attribute को Blank ही छोड दें। क्योंकि जब हम इसे Blank छोडते हैं, तो Blank Action Attribute Current Scrip या Page को ही Refer करता है।

जबकि यदि हम इसे Dynamic बनाना चाहते हैं और हमारे लिए Action Attribute को Manually Set करना जरूरी है, तो उस स्थिति में हमें esc_url Parameter का प्रयोग करते हुए निम्नानुसार तरीके से HTML Form के Action Attribute को Set करना चाहिए:

<form method="get" action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>"> 
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>

$_GET व $_POST Super Global Array की तरह ही हम $_COOKIE के Data पर भी भरोसा नहीं कर सकते। क्योंकि हम बडी ही आसानी से Firebug जैसे Tools का प्रयोग करके Cookies को Modify कर सकते हैं। इसलिए Cookies को भी Exactly उसी तरह से Treat करते हुए Validate व Sanitize करना चाहिए, जिस तरह से Form द्वारा Submitted Data को किया जाता है।

साथ ही जब हम WordPress Use कर रहे होते हैं, तब एक और ध्‍यान रखने वाली बात ये होती है कि Pure PHP में तो हम $_GET, $_POST व $_COOKIE तीनों Super Global Arrays को $_REQUEST Super Global Array द्वारा Comman रूप से Access कर सकते हैं। लेकिन जब हम WordPress Use करते हैं, तब WordPress Environment इस Global Array से $_COOKIE के Data को पूरी तरह से Remove कर देता है।

इसलिए Cookies को ।बबमे करने के लिए हमें WordPress Environment में हमेंशा $_COOKIE Super Global Array को Directly Use करना जरूरी होता है। यानी हम $_COOKIE के Data को $_REQUEST द्वारा ठीक उसी तरह से Access नहीं कर सकते, जिस तरह से $_GET, $_POST के Data को Access करते हैं।

जब हमें पता होता है कि हमें कितने Data Validate व Sanitize करना है, तब हम बडी ही आसानी से Request URL से Expected Data को Extract करते हुए उसे किसी Array में या Individual Variables में निम्नानुसार Store करके Validate व Sanitize कर सकते हैं:

//Sanitize the whole $_POST array
$_POST = array_map( 'absint', $_POST );

//Extract only expected values
$clean = array();
$clean['age'] = $_POST['age'];
$clean['username'] = $_POST['username'];
$clean['income'] = $_POST['income'];

लेकिन जब हमें पता नहीं होता कि हमें कितने Data को Validate व Sanitize करना है, तब उस स्थिति में array_map() Function को हम कुछ निम्नानुसार तरीके से Use कर सकते हैं:

$clean_urls = array();

// Split the textarea value into an array of URLs
$urls = split( "\n", $_POST['urls_in_textarea'] );

// Sanitize the whole array
$clean_urls = array_map( 'esc_url', $urls );

इस Code में split() Function का प्रयोग करके $_POST Super Global Array के ‘urls_in_textarea’ में Specified सभी URLS को $urls में Store कर लिया गया है। फिर हर URL को Sanitize करने के लिए हमने array_map() Function को Use किया है, जो $urls Array में Stored विभिन्न URLs को esc_url() API Function द्वारा Clean करके $clean_urls Array में Store कर देता है।

इस Code Segment में हम ये मान रहे हैं कि urls_in_textarea नाम वाले Text Area Element में User बहुत सारे URLs Input कर रहा है और हर URL को Web Server पर Sanitize किया जा रहा है। जबकि हमें पता नहीं है कि User, Text Area में कितने URLs Input कर रहा है।

इस तरह से उपरोक्तानुसार Code द्वारा हम Values के पूरे एक Array में Stored विभिन्न Data को एक ही बार में Sanitize कर सकते हैं, जबकि Array में कितने Data हैं, इस बात का भी हमें ठीक से पता नहीं है।

Data Validation Example
WordPress User API

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