PHP फॉर्म वेरिफ़िकेशन
इस खंड और अगला खंड PHP के द्वारा फॉर्म डाटा की प्रमाणीकरण के तरीकों को सिखाते हैं।
PHP फॉर्म वेरिफ़िकेशन
सूचना:PHP फॉर्म को हानि से बचाने के लिए सुरक्षा को ध्यान में रखें!
ये पृष्ठ फील्ड भ्रष्टाचारी और निर्दोष ईमेल रोकने के लिए PHP फॉर्म डाटा का उचित सत्यापन के महत्व को प्रदर्शित करेंगे!
हम बाद में इस्तेमाल करने वाले HTML फॉर्म के अनेक इनपुट फील्डों को शामिल करते हैं: अनिवार्य और वृत्तियूक्त टेक्स्ट फील्ड, रेडियो बटन और सबमिट बटन:
ऊपरी फॉर्म निम्नलिखित सत्यापन नियमों का उपयोग करता है:
फील्ड | सत्यापन नियम |
---|---|
Name | अनिवार्य। अक्षर और खाली जगह शामिल करना आवश्यक है。 |
अनिवार्य। वैध ईमेल पता (शामिल @ और .) शामिल करना आवश्यक है。 | |
Website | वृत्तियूक्त। यदि भरा जाता है, तो वैध URL शामिल करना आवश्यक है。 |
Comment | वृत्तियूक्त। बहु-पंक्ति इनपुट फील्ड (टेक्स्टबॉक्स)। |
Gender | अनिवार्य। एक चयन करना आवश्यक है。 |
पहले हम इस फॉर्म के शुद्ध HTML कोड को देखेंगे:
टेक्स्ट फील्ड
name, email और website टेक्स्ट इनपुट एलीमेंट हैं, comment फील्ड एक टेक्स्टबॉक्स है।HTML कोड इस तरह है:
Name: <input type="text" name="name"> E-mail: <input type="text" name="email"> Website: <input type="text" name="website"> Comment: <textarea name="comment" rows="5" cols="40"></textarea>
रेडियो बटन
gender फील्ड एक रेडियो बटन है, HTML कोड इस तरह है:
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
फॉर्म एलीमेंट
फॉर्म का HTML कोड इस तरह है:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
इस फॉर्म को सबमिट करते समय, method="post" के माध्यम से फॉर्म डाटा भेजा जाता है。
$_SERVER["PHP_SELF"] वेरियेबल क्या है?
$_SERVER["PHP_SELF"] एक सुपर ग्लोबल वेरियेबल है, जो वर्तमान एक्टिव स्क्रिप्ट के फ़ाइल नाम को वापस करता है。
इसलिए, $_SERVER["PHP_SELF"] फॉर्म डाटा को पृष्ठ को भेजता है, न कि दूसरे पृष्ठ पर जाता है। इस तरह, उपयोगकर्ता फॉर्म पृष्ठ पर त्रुटि संदेश प्राप्त कर सकता है。
htmlspecialchars() फ़ंक्शन क्या है?
htmlspecialchars() फ़ंक्शन विशिष्ट चरित्रों को HTML एंबीजेंट्स में बदल देता है। इसका मतलब है कि < और > जैसे HTML चरित्र इसके जवाब में < और > के रूप में बदल जाएंगे। इससे यह सुनिश्चित किया जा सकता है कि हमलावर फॉर्म में HTML या JavaScript कोड (क्रॉस-साइट स्क्रिप्टिंग हमला) को उपयोग करने की कोशिश न करे।
PHP फॉर्म सुरक्षा के बारे में एक महत्वपूर्ण सूचना
$_SERVER["PHP_SELF"] वेरियेबल को हैकर उपयोग किया जा सकता है!
अगर आपका पृष्ठ PHP_SELF का उपयोग करता है, तो उपयोगकर्ता एक निशानी भर सकता है और उसे क्रॉस-साइट स्क्रिप्टिंग (XSS) के रूप में चलाया जा सकता है。
सूचना:क्रॉस-साइट स्क्रिप्टिंग (Cross-site scripting, XSS) एक कंप्यूटर सुरक्षा लोचना है जो वेब एप्लिकेशनों में आम है। XSS एक हमलावर को उपयोगकर्ता के द्वारा देखे जाने वाले वेब पृष्ठों में क्लायंट स्क्रिप्ट भरने की क्षमता प्रदान करता है。
यदि हमारे "test_form.php" नामक पृष्ठ में इस तरह का एक फॉर्म है:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
अब, अगर उपयोगकर्ता ने एक सामान्य URL में प्रवेश किया है: "http://www.example.com/test_form.php" तो ऊपरी कोड इस तरह बदल जाएगा:
<form method="post" action="test_form.php">
अब तक सब ठीक है।
हालांकि, अगर उपयोगकर्ता ने एक ऐसा URL जिसे उसने पाठ के अनुसार भरा है, तो:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
इस स्थिति में, ऊपरी कोड इस तरह बदल जाएगा:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
इस कोड में एक स्क्रिप्ट और एक टिप्पणी कमांड जोड़ा गया है। और जब इस पृष्ठ को लोड किया जाता है, तो JavaScript कोड चलाया जाएगा (उपयोगकर्ता को एक टिप्पणी बॉक्स दिखाया जाएगा)। यह एक साधारण निर्दोष केस है जो PHP_SELF वेरियेबल को कैसे उपयोग किया जाता है का एक उदाहरण है।
आपको यह ध्यान में रखना चाहिए <script> टैग में कोई भी JavaScript कोड जोड़ा जा सकता है! हैकर उपयोगकर्ता को एक अन्य सर्वर पर किसी फ़ाइल के लिए रीडायरेक्ट कर सकते हैं, जिसमें खतरनाक कोड हो सकता है जो वैश्विक वारियबलों को बदल सकता है या फॉर्म को अन्य पते पर सबमिट कर सकता है और उपयोगकर्ता डाटा को सहेज सकता है, आदि।
अगर $_SERVER["PHP_SELF"] का उपयोग करने से बचना चाहते हैं?
htmlspecialchars() फ़ंक्शन के उपयोग से $_SERVER["PHP_SELF"] का उपयोग करने से बच सकते हैं।
फॉर्म कोड इस तरह है:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);>"
htmlspecialchars() फ़ंक्शन विशेष अक्षरों को HTML एंटी थिंकिंग कर देता है। अब, यदि उपयोगकर्ता PHP_SELF वारियबल का उपयोग करने की कोशिश करता है, तो इस तरह का आउटपुट होगा:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
अस्त्रोगत, नुकसान नहीं!
PHP के माध्यम से फॉर्म डाटा की प्रमाणीकरण
हमारी पहली कार्यवाही यह है कि हम सभी वारियबलों को PHP के htmlspecialchars() फ़ंक्शन के माध्यम से पास करें।
जब हम htmlspecialchars() फ़ंक्शन के बाद उपयोगकर्ता टैक्स्ट फ़ील्ड में निम्नलिखित सामग्री सबमिट करने की कोशिश करता है:
<script>location.href('http://www.hacked.com')</script>
- कोड नहीं चलेगा, क्योंकि यह एक्सकेप के रूप में सहेजा जाएगा, इस तरह:
<script>location.href('http://www.hacked.com')</script>
अब यह कोड पृष्ठ पर या ई-मेल में सुरक्षित है。
जब उपयोगकर्ता इस फॉर्म को सबमिट करता है, हम दो चीजें करना भी होगा:
- (PHP trim() फ़ंक्शन के माध्यम से) उपयोगकर्ता इनपुट डाटा में अनावश्यक अक्षर (अतिरिक्त खाली जगह, टैब, नया पाठ) हटा दें
- (PHP stripslashes() फ़ंक्शन के माध्यम से) उपयोगकर्ता इनपुट डाटा में रिवर्स स्क्रिप्ट (\) हटा दें
अब, हम एक जांच फ़ंक्शन बनाएंगे (कोड लिखने के बजाय, यह अधिक दक्ष है).
हमने फ़ंक्शन को test_input() कहा है。
अब, हम test_input() फ़ंक्शन के माध्यम से हर $_POST वारियबल की जांच कर सकते हैं, इस तरह का स्क्रिप्ट है:
उदाहरण
<?php // वारियबल डिफाइन करें और खाली मान दें $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
请注意在脚本开头,我们检查了表单是否使用 $_SERVER["REQUEST_METHOD"] 进行提交。如果 REQUEST_METHOD 是 POST,那么表单已被提交 - 并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单。
不过,在上面的例子中,所有输入字段都是可选的。即使用户未输入任何数据,脚本也能正常工作。
下一步是制作必填输入字段,并创建需要时使用的错误消息。