पीएचपी ट्यूटोरियल

पीएचपी होम पीएचपी परिचय पीएचपी इंस्टाल पीएचपी सिंटैक्स पीएचपी टिप्पणियाँ पीएचपी चर पीएचपी इको / प्रिंट पीएचपी डेटा प्रकार पीएचपी स्ट्रिंग्स पीएचपी नंबर पीएचपी गणित पीएचपी स्थिरांक पीएचपी ऑपरेटर्स पीएचपी अगर ... और ... Elseif पीएचपी स्विच पीएचपी लूप्स पीएचपी कार्य पीएचपी सरणियाँ पीएचपी सुपरग्लोबल्स पीएचपी रेगेक्स

पीएचपी फॉर्म

PHP फॉर्म हैंडलिंग PHP फॉर्म सत्यापन पीएचपी फॉर्म की आवश्यकता पीएचपी फॉर्म यूआरएल/ई-मेल PHP फॉर्म पूर्ण

पीएचपी उन्नत

पीएचपी दिनांक और समय पीएचपी शामिल करें पीएचपी फाइल हैंडलिंग PHP फ़ाइल खोलें/पढ़ें PHP फ़ाइल बनाएँ/लिखें पीएचपी फ़ाइल अपलोड पीएचपी कुकीज़ पीएचपी सत्र पीएचपी फिल्टर पीएचपी फिल्टर उन्नत PHP कॉलबैक फ़ंक्शंस पीएचपी JSON पीएचपी अपवाद

पीएचपी ओओपी

पीएचपी ओओपी क्या है पीएचपी क्लासेस/ऑब्जेक्ट्स पीएचपी कंस्ट्रक्टर पीएचपी विनाशक पीएचपी एक्सेस संशोधक पीएचपी विरासत पीएचपी स्थिरांक पीएचपी सार वर्ग पीएचपी इंटरफेस पीएचपी लक्षण PHP स्टेटिक तरीके पीएचपी स्टेटिक गुण पीएचपी नेमस्पेस पीएचपी Iterables

MySQL डेटाबेस

MySQL डेटाबेस MySQL कनेक्ट MySQL डीबी बनाएँ MySQL तालिका बनाएँ MySQL डेटा डालें MySQL अंतिम आईडी प्राप्त करें MySQL एकाधिक सम्मिलित करें MySQL तैयार MySQL डेटा का चयन करें MySQL कहाँ MySQL ऑर्डर बाय MySQL डेटा हटाएं MySQL अद्यतन डेटा MySQL सीमा डेटा

पीएचपी एक्सएमएल

पीएचपी एक्सएमएल पार्सर्स पीएचपी सिंपलएक्सएमएल पार्सर पीएचपी सिंपलएक्सएमएल - प्राप्त करें पीएचपी एक्सएमएल एक्सपैट पीएचपी एक्सएमएल डोम

पीएचपी - AJAX

AJAX परिचय अजाक्स पीएचपी AJAX डेटाबेस अजाक्स एक्सएमएल AJAX लाइव खोज AJAX पोल

पीएचपी उदाहरण

पीएचपी उदाहरण पीएचपी संकलक पीएचपी प्रश्नोत्तरी पीएचपी व्यायाम पीएचपी प्रमाणपत्र

पीएचपी संदर्भ

पीएचपी सिंहावलोकन पीएचपी सरणी पीएचपी कैलेंडर पीएचपी तिथि पीएचपी निर्देशिका पीएचपी त्रुटि पीएचपी अपवाद पीएचपी फाइल सिस्टम पीएचपी फ़िल्टर पीएचपी एफ़टीपी पीएचपी JSON पीएचपी कीवर्ड पीएचपी लिबक्सएमएल पीएचपी मेल पीएचपी गणित पीएचपी विविध पीएचपी MySQLi पीएचपी नेटवर्क पीएचपी आउटपुट नियंत्रण पीएचपी रेगेक्स पीएचपी सिंपलएक्सएमएल पीएचपी स्ट्रीम पीएचपी स्ट्रिंग PHP वैरिएबल हैंडलिंग पीएचपी एक्सएमएल पार्सर पीएचपी ज़िप पीएचपी समयक्षेत्र

PHP फॉर्म सत्यापन


यह और अगले अध्याय दिखाते हैं कि फॉर्म डेटा को मान्य करने के लिए PHP का उपयोग कैसे करें।


PHP फॉर्म सत्यापन

PHP रूपों को संसाधित करते समय सुरक्षा के बारे में सोचें!

ये पृष्ठ दिखाएंगे कि सुरक्षा को ध्यान में रखते हुए PHP प्रपत्रों को कैसे संसाधित किया जाए। आपके फ़ॉर्म को हैकर्स और स्पैमर से बचाने के लिए फ़ॉर्म डेटा का उचित सत्यापन महत्वपूर्ण है!

इन अध्यायों में हम जिस HTML फॉर्म पर काम करेंगे, उसमें विभिन्न इनपुट फ़ील्ड शामिल हैं: आवश्यक और वैकल्पिक टेक्स्ट फ़ील्ड, रेडियो बटन और सबमिट बटन:

ऊपर दिए गए फॉर्म के सत्यापन नियम इस प्रकार हैं:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

सबसे पहले हम फॉर्म के लिए सादे 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>

रेडियो के बटन

लिंग फ़ील्ड रेडियो बटन हैं और HTML कोड इस तरह दिखता है:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

प्रपत्र तत्व

फॉर्म का एचटीएमएल कोड इस तरह दिखता है:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

जब फॉर्म जमा किया जाता है, तो फॉर्म डेटा विधि = "पोस्ट" के साथ भेजा जाता है।

$_SERVER["PHP_SELF"] चर क्या है?

$_SERVER["PHP_SELF"] एक सुपर ग्लोबल वैरिएबल है जो वर्तमान में निष्पादित स्क्रिप्ट का फ़ाइल नाम देता है।

इसलिए, $_SERVER["PHP_SELF"] सबमिट किए गए प्रपत्र डेटा को किसी भिन्न पृष्ठ पर जाने के बजाय, पृष्ठ पर ही भेजता है। इस तरह, उपयोगकर्ता को फॉर्म के समान पृष्ठ पर त्रुटि संदेश प्राप्त होंगे।

htmlspecialchars() फ़ंक्शन क्या है?

htmlspecialchars() फ़ंक्शन विशेष वर्णों को HTML निकायों में परिवर्तित करता है। इसका अर्थ है कि यह HTML वर्णों जैसे < और > को < और >. यह हमलावरों को फॉर्म में HTML या Javascript कोड (क्रॉस-साइट स्क्रिप्टिंग अटैक) इंजेक्ट करके कोड का फायदा उठाने से रोकता है।


PHP फॉर्म सुरक्षा पर बड़ा नोट

$_SERVER["PHP_SELF"] वैरिएबल का उपयोग हैकर्स कर सकते हैं!

यदि आपके पृष्ठ में PHP_SELF का उपयोग किया जाता है तो उपयोगकर्ता एक स्लैश (/) दर्ज कर सकता है और फिर कुछ क्रॉस साइट स्क्रिप्टिंग (XSS) कमांड निष्पादित करने के लिए दर्ज कर सकता है।

क्रॉस-साइट स्क्रिप्टिंग (XSS) एक प्रकार की कंप्यूटर सुरक्षा भेद्यता है जो आमतौर पर वेब अनुप्रयोगों में पाई जाती है। XSS हमलावरों को क्लाइंट-साइड स्क्रिप्ट को अन्य उपयोगकर्ताओं द्वारा देखे गए वेब पेजों में इंजेक्ट करने में सक्षम बनाता है।

मान लें कि हमारे पास "test_form.php" नामक पृष्ठ में निम्न रूप है:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

अब, यदि कोई उपयोगकर्ता "http://www.example.com/test_form.php" जैसे एड्रेस बार में सामान्य URL दर्ज करता है, तो उपरोक्त कोड का अनुवाद किया जाएगा:

<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>

यह कोड एक स्क्रिप्ट टैग और एक अलर्ट कमांड जोड़ता है। और जब पृष्ठ लोड होता है, तो जावास्क्रिप्ट कोड निष्पादित किया जाएगा (उपयोगकर्ता को एक अलर्ट बॉक्स दिखाई देगा)। यह सिर्फ एक सरल और हानिरहित उदाहरण है कि कैसे PHP_SELF चर का शोषण किया जा सकता है।

इस बात से अवगत रहें कि किसी भी JavaScript कोड को <script> टैग के अंदर जोड़ा जा सकता है! एक हैकर उपयोगकर्ता को किसी अन्य सर्वर पर फ़ाइल पर रीडायरेक्ट कर सकता है, और वह फ़ाइल दुर्भावनापूर्ण कोड धारण कर सकती है जो वैश्विक चर को बदल सकती है या उपयोगकर्ता डेटा को सहेजने के लिए फ़ॉर्म को किसी अन्य पते पर सबमिट कर सकती है, उदाहरण के लिए।


$_SERVER["PHP_SELF"] शोषण से कैसे बचें?

$_SERVER["PHP_SELF"] htmlspecialchars() फ़ंक्शन का उपयोग करके शोषण से बचा जा सकता है।

फॉर्म कोड इस तरह दिखना चाहिए:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

htmlspecialchars() फ़ंक्शन विशेष वर्णों को HTML निकायों में परिवर्तित करता है। अब यदि उपयोगकर्ता PHP_SELF चर का शोषण करने का प्रयास करता है, तो इसका परिणाम निम्न आउटपुट में होगा:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

शोषण का प्रयास विफल रहता है, और कोई नुकसान नहीं होता है!


PHP के साथ फॉर्म डेटा मान्य करें

पहली चीज जो हम करेंगे वह है PHP के htmlspecialchars() फ़ंक्शन के माध्यम से सभी वेरिएबल्स को पास करना।

जब हम htmlspecialchars() फ़ंक्शन का उपयोग करते हैं; फिर यदि कोई उपयोगकर्ता टेक्स्ट फ़ील्ड में निम्नलिखित सबमिट करने का प्रयास करता है:

<script>location.href('http://www.hacked.com')</script>

- इसे निष्पादित नहीं किया जाएगा, क्योंकि इसे HTML एस्केप कोड के रूप में सहेजा जाएगा, जैसे:

<script>location.href('http://www.hacked.com')</script>

कोड अब पेज पर या ई-मेल के अंदर प्रदर्शित होने के लिए सुरक्षित है।

जब उपयोगकर्ता फ़ॉर्म सबमिट करेगा तो हम दो और काम भी करेंगे:

  1. उपयोगकर्ता इनपुट डेटा (PHP ट्रिम () फ़ंक्शन के साथ) से अनावश्यक वर्णों (अतिरिक्त स्थान, टैब, न्यूलाइन) को हटा दें।
  2. उपयोगकर्ता इनपुट डेटा से बैकस्लैश (\) निकालें (PHP स्ट्रिप्सलाश () फ़ंक्शन के साथ)

अगला कदम एक ऐसा फ़ंक्शन बनाना है जो हमारे लिए सभी जांच करेगा (जो एक ही कोड को बार-बार लिखने से कहीं अधिक सुविधाजनक है)।

हम फ़ंक्शन का नाम test_input() रखेंगे।

अब, हम प्रत्येक $_POST चर को test_input() फ़ंक्शन के साथ जांच सकते हैं, और स्क्रिप्ट इस तरह दिखती है:

उदाहरण

<?php
// define variables and set to empty values
$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 पोस्ट है, तो फॉर्म जमा कर दिया गया है - और इसे मान्य किया जाना चाहिए। यदि इसे सबमिट नहीं किया गया है, तो सत्यापन को छोड़ दें और एक खाली फॉर्म प्रदर्शित करें।

हालांकि, ऊपर के उदाहरण में, सभी इनपुट फ़ील्ड वैकल्पिक हैं। यदि उपयोगकर्ता कोई डेटा दर्ज नहीं करता है तो भी स्क्रिप्ट ठीक काम करती है।

अगला कदम इनपुट फ़ील्ड को आवश्यक बनाना और यदि आवश्यक हो तो त्रुटि संदेश बनाना है।