How to Secure WordPress – Data Validation and Sanitization

How to Secure WordPress – Data Validation and Sanitization – जब हम User से किसी HTML Form के विभिन्न प्रकार के Input Elements के माध्‍यम से या किसी अन्‍य तरीके से External Data Receive कर रहे होते हैं, तब हमें इस बात को निश्चित करना जरूरी होता है कि आना वाला External Data किसी भी प्रकार के Illegal Characters से मुक्त हो।

यानी किसी भी Website में विभिन्न माध्‍यमों जैसे कि Users, Third Party Sites, Database आदि विभिन्न माध्‍यमों से Un-Trusted Retrieve हो सकते हैं, जिनके साथ Deal करने की जरूरत पडती है और ये Dealing न केवल Input Level पर करने की जरूरत होती है, बल्कि Appropriate Output Generate करने के लिए भी हमें इन विभिन्न प्रकार के Data के साथ सही तरीके से Interact करना जरूरी होता है।

इसीलिए WordPress API, User Forms के माध्‍यम से हमें Appropriate Data ही Accept करने के लिए कुछ Data Validation Functions Provide करता है, जिन्हें हमें हमेंशा अपने Plugin/Theme में तब उपयोग में लेना निश्चित रूप से जरूरी होता है, जब हम External Data को Accept करते हुए Process करना चाहते हैं। क्योंकि Improper तरीके से Validated Data ही WordPress Site/Blog के लिए विभिन्न प्रकार के Security Issues जैसे कि SQL Injection Hacks, Exploits, Errors आदि का कारण बनते हैं।

इसलिए Data को Input व Output दोनों के लिए एक ऐसे उपयुक्त Format में Convert करनाए जो कि किसी भी तरह से Inconsistency या किसी Security Issue का कारण न बने, इस प्रक्रिया को Data Sanitization के नाम से जाना जाता है और विभिन्न प्रकार की जरूरतों को पूरा करने के लिए Use होने Data को विभिन्न तरीकों से Sanitize करने की जरूरत पडती है। यानी Data Sanitization करने के लिए किस तरीके को Use करना है, ये बात हमेंशा Use होने वाले Data के Type व उसके Use होने के Context पर निर्भर करता है।

Output Sanitization

Data Sanitization के दौरान जिन Data को Output के रूप में Display करना होता है, उन Data को जितना देर से सम्भव हो, उतना देर से Validate यानी Sanitize करना चाहिए। क्योंकि Output होने वाले Data का Validation पहले करने के बाद यदि Data में किसी तरह को कोई Modification किया जाए, तो उस Data को फिर से Validate यानी Sanitize करने की जरूरत पड सकती है।

Integer Validation

अलग-अलग तरह के Data को अलग-अलग तरीके से Sanitize या Validate किया जाता है। इसलिए जब हमें Integer Values को Validate करना होता है, तब हमें WordPress के intval() Core Function या Casting का प्रयोग करना होता है। जैसे:

intval( $int )
or
(int) $int

जब हम उपरोक्तानुसार किसी Statement को Use करते हैं, तो ये बात निश्चित हो जाती है कि $int किसी भी स्थिति में एक Non-Integer Value नहीं रहेगा।

HTML/XML Sanitization

कुछ Specific प्रकार के XML Documents कुछ ही Named Character References जैसे कि apos, amp, gt, lt, quot आदि समझते हैं। इसलिए इस प्रकार के XML Documents के Texts को Output करते समय किसी भी Illegal Named Entity को Filter करने के लिए WordPress के ent2ncr( $text ) API Function को Use करना चाहिए, जिसका Syntax निम्नानुसार होता है:

      ent2ncr( $text );

ये API Function $text Parameter के रूप में एक ऐसी String Receive करता है, जिसमें Convert किए जाने योग्‍य Entities होते हैं और Return Value के रूप में Converted String Return करता है। जैसे:

<?php echo ent2ncr(“C&rsquo;est la f&ecirc;te!”); ?>

जब ये Statement Execute होता है, तब Web Browser के Web Page के Source Code ये Statement निम्नानुसार Output Generate करता है, जिसमें Special Characters यानी Entities के Codes को ent2ncr() API Function द्वारा Numerical Codes में Convert कर दिया जाता है।

C&#8217;est la f&#234;te!

जबकि Web Browser इस Converted String को निम्नानुसार Render करता है:

Cest la fête!

इसी तरह से wp_rel_nofollow() API Function किसी Anchor Element के साथ rel=”nofollow String को Add कर देता है और उस Element के Content को esc_sql() API Function के माध्‍यम से Escape कर देता है। हालांकि हमें इस Function को कभी भी ऐसे HTML को Escape करने के लिए Use नहीं करना चाहिए, जिसे Output में Display करना हो। बल्कि ये Function उस Content के साथ nofollow Add करने के लिए Use किया जाना चाहिए, जिसे Database में Store करना हो।

WordPress API हमें कुछ Escaping Functions भी Provide करता है, जिनका प्रयोग करके हम इस बात को निश्चित कर सकते हैं कि Form से आने वाला External Data Display होने के लिए अथवा Database में Insert होने के लिए पूरी तरह से Valid है। ये सभी Escaping Functions एक Specific Naming Convention Follow करते हैं, जिसे निम्नानुसार Represent किया जा सकता है:

जैसाकि इस Statement में हम देख सकते हैं कि WordPress के सभी Escaping API Functions के तीन हिस्से होते हैं। जहां पहला हिस्सा “esc” एक प्रकार का Prefix मा= है, जो इस बात को Represent करता है कि Current API Function एक Escaping Function है।

जबकि दूसरा हिस्सा Escaping Context को Represent करते हुए इस बात को तय करता है कि Current Function किस प्रकार के Data के साथ प्रक्रिया करेगा। इसके अन्तर्गत सामान्‍यत: attr, html, js, sql, url url_raw प्रकार के Data हो सकते हैं।

तीसरे हिस्से के रूप में हम Translation Suffix Use कर सकते हैं जो कि एक Optional Part होता है और Localization व Internationalization को Represent करता है। इस तीसरे हिस्से के रूप में हम “_e” या “_ _” का प्रयोग कर सकते हैं। इस प्रकार से यदि हम विभिन्न प्रकार के Escaping API Functions को देखें, तो ये निम्नानुसार हो सकते हैं:

  • esc_html()
    • esc_html__()
    • esc_html_e()
  • esc_attr()
    • esc_attr__()
    • esc_attr_e()
  • esc_js()
  • esc_textarea()
  • esc_sql()
  • esc_url()
    • esc_url_raw()

esc_html( $text ) API Function

ये Function $text Parameter के रूप में एक ऐसी String Accept करता है, जिसमें &, <, >, “ या HTML Entities होते हैं और इन HTML Entities को ये API Function Related Character Encoding में Encode कर देता है। जैसे:

        $html = esc_html( ‘<a href=”http://www.example.com/”>A link</a>’ );

जब हम ये Statement लिखते हैं, तो esc_html() Function, Parameter के रूप में Specified Anchor Element को निम्नानुसार Convert करके $html Variable में Store कर देता है:

        &lt;a href=&quot;http://www.example.com/&quot;&gt;A link&lt;/a&gt;

जिसमें सभी Double Quotes को “&quot;”, सभी “<” Symbols को “&lt;” व सभी “>” Symbols को “&gt;” से Replace कर दिया गया है। लेकिन जब हम इस $html को Web Browser द्वारा Render करते हैं, तब हमें प्राप्त होने वाला Resultant Output निम्नानुसार होता है:

        <a href=”http://www.example.com/”>A link</a>

न कि “A link” Hyperlink, जिस पर हम Click करके href Attribute में Specified URL पर Navigate कर सकें।

इसी API Function की तरह ही esc_html__()esc_html_e() API Function भी काम करते हैं। अन्तर केवल यही है कि ये दोनों Functions तब उपयोगी होते हैं, जब हम Localization व Internationalization की सुविधा प्राप्त करना चाहते हैं।

इन दोनों API Functions के बीच मूल अन्तर ये है कि esc_html__() API Function अपने Parameter के रूप में Specified $text के Content की Escaping व Translation करने साथ ही $text के Content को Echo यानी Display भी करता है। जबकि esc_html_e() API Function अपने Parameter के रूप में Specified $text के Content की Escaping व Translation तो करता है लेकिन $text के Content को Echo यानी Display नहीं करता।

esc_attr( $text ) API Function

ये Function $text Parameter के रूप में एक ऐसी String Accept करता है, जिसमें &, <, >, “ या HTML Entities होते हैं और इन HTML Entities को ये API Function Related Character Encoding में Encode कर देता है।

जब हम HTML Form Create करते हैं, तब विभिन्न HTML Elements के Attributes जैसे कि alt, value, title आदि को इस API Function द्वारा जरूर Escape किया जाता है। जबकि esc_html__()esc_html_e() API Functions की तरह ही Translation (Localization व Internationalization) के लिए esc_attr__() esc_attr_e() API Functions को भी Use किया जा सकता है। esc_attr() API Function को हम निम्नानुसार तरीके से Use कर सकते हैं:

<?php
    echo '<input type="text" name="fname" value="' . esc_attr( $_POST['fname'] ) . '">';
?>

esc_textarea( $text ) API Function

जब हम किसी HTML Form में Textarea Element Use करते हैं, तो उस Textarea Content में स्थित HTML Entities को Encode करने के लिए इस API Function का प्रयोग किया जाता है। परिणामस्वरूप ये API Function Textarea के Content की Escaping करके Result को Return Value के रूप में Return कर देता है।

esc_js( $text ) API Function

ये API Function Single Quotes, htmlspecialchar, “, <, >, & व Fix Line Endings को Escape करता है। जब हम Inline JavaScript (like onclick=”…”) का प्रयोग करते हैं, तब इस प्रकार के JavaScript Codes को इस API Function द्वारा Escape किया जाता है। यहां इस बात को ध्‍यान में रखना जरूरी होता है कि हमारा String Single Quotes के बीच ही Enclose हो।

हालांकि सामान्‍यत: Modern Web Development में Inline JavaScript का प्रयोग नहीं किया जाता। इसलिए इस स्थिति में json_encode() Function JavaScript Escaping के लिए ज्यादा उपयोगी साबित होता है, जो कि एक Core PHP Function है। esc_js() API Function को समझने के लिए हम निम्नानुसार एक Example Code Create कर सकते हैं:

<input 
	type="text" 
	value="<?php echo esc_attr( $instance['input_text'] ); ?>" 
	id="subbox" 
onfocus="if ( this.value == '<?php echo esc_js( $instance['input_text'] ); ?>') { this.value = ''; }" onblur="if ( this.value == '' ) { this.value = '<?php echo esc_js( $instance['input_text'] ); ?>'; }" name="email" 
/>

जैसाकि हमने पहले कहा कि Modern Web Development में Inline JavaScript का प्रयोग नहीं किया जाता। इसलिए json_encode() API Function को हम कुछ निम्नानुसार तरीके से Use कर सकते हैं:

<script type=”text/javascript”>

    var title = <?php echo json_encode( $instance[title] ) ?>;

</script>

Continue…

Database Sanitization
File System Sanitization
HTTP Headers Sanitization

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