PHP ਫਾਰਮ ਪ੍ਰਮਾਣੀਕਰਣ

ਇਸ ਚੈਪਟਰ ਅਤੇ ਅਗਲਾ ਚੈਪਟਰ ਫਾਰਮ ਡਾਟਾ ਚੈਕ ਕਰਨ ਲਈ ਕਿਵੇਂ PHP ਵਰਤਣਾ ਹੈ ਦੱਸਦੇ ਹਨ。

PHP ਫਾਰਮ ਪ੍ਰਮਾਣੀਕਰਣ

ਸੁਝਾਅ:PHP ਫਾਰਮ ਦੇ ਹੱਲ ਕਰਨ ਵਿੱਚ ਸੁਰੱਖਿਆ ਨੂੰ ਧਿਆਨ ਦੇਣਾ ਹੈ!

ਇਹ ਪੇਜ ਪਹਿਲਾਂ ਤੋਂ PHP ਫਾਰਮ ਦਾ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਹੱਲ ਕਰਨ ਦੇ ਤਰੀਕੇ ਦਿਖਾਉਣਗੇ। ਏਥੀਂ ਤੱਕ ਕਿ HTML ਫਾਰਮ ਡੇਟਾ ਦੀ ਉਚਿਤ ਪ੍ਰਮਾਣੀਕਰਣ ਕਰਨਾ ਹੈਕਰਾਂ ਅਤੇ ਸਪਾਮ ਮੈਲ ਤੋਂ ਬਚਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ!

ਅਸੀਂ ਬਾਅਦ ਵਿੱਚ ਵਰਤਣ ਵਾਲੇ HTML ਫਾਰਮ ਵਿੱਚ ਕਈ ਇਨਪੁਟ ਫੀਲਡ ਹਨ: ਲਾਜ਼ਮੀ ਅਤੇ ਵਿਕਲਪਿਕ ਟੈਕਸਟ ਫੀਲਡ, ਰੇਡੀਓ ਬਟਨ ਅਤੇ ਸੰਬੋਧਨ ਬਟਨ:

ਉੱਪਰੋਕਤ ਫਾਰਮ ਨੂੰ ਨਿਮਨਲਿਖਤ ਪ੍ਰਮਾਣੀਕਰਣ ਨਿਯਮਾਂ ਦਿੱਤੇ ਗਏ ਹਨ:

ਫੀਲਡ ਪ੍ਰਮਾਣੀਕਰਣ ਨਿਯਮ
Name ਲਾਜ਼ਮੀ। ਅੱਖਰ ਅਤੇ ਖਾਲੀ ਜਗ੍ਹਾ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ。
E-mail ਲਾਜ਼ਮੀ। ਇੱਕ ਵੈਧ ਈਮੇਲ ਐਡਰੈੱਸ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ (ਸਮੇਤ @ ਅਤੇ .)。
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"];?>">

ਹੁਣ ਜੇਕਰ ਉਪਭੋਗਤਾ ਨੇ ਸਾਧਾਰਨ ਐਡਰੈੱਸ ਬਾਰ ਵਿੱਚ ਇਹ ਐਡਰੈੱਸ ਦਿਖਾਈ ਦੇਵੇ: "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>

ਹੁਣ ਇਹ ਕੋਡ ਪੰਨੇ 'ਤੇ ਜਾਂ e-mail ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਦਿਖਾਇਆ ਜਾਵੇਗਾ。

ਉਸ ਵਾਰੀ ਨੂੰ ਸੰਭਾਲਣ ਦੇ ਸਮੇਂ, ਅਸੀਂ ਦੋ ਚੀਜਾਂ ਕਰਨੀਆਂ ਹਨ:

  1. (ਵਾਰੀਆਂ ਦੇ ਮਿਟਾਉਣ ਲਈ PHP trim() ਫੰਕਸ਼ਨ ਦੀ ਮਦਦ ਲਈ)
  2. (ਪਿਛਲੇ ਵਾਰੀਆਂ ਨੂੰ ਮਿਟਾਉਣ ਲਈ PHP stripslashes() ਫੰਕਸ਼ਨ ਦੀ ਮਦਦ ਲਈ)

ਅਗਲੇ ਅਸੀਂ ਇੱਕ ਚੈਕ ਫੰਕਸ਼ਨ ਬਣਾਉਣਾ ਚਾਹੁੰਦੇ ਹਾਂ (ਕੋਡ ਲਿਖਣ ਦੀ ਬਜਾਏ ਇਸ ਤਰ੍ਹਾਂ ਹੀ ਕੰਮ ਕਰੇ, ਇਸ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਨਾ ਕਾਫੀ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ).

ਅਸੀਂ ਫੰਕਸ਼ਨ ਦਾ ਨਾਮ test_input() ਰੱਖਿਆ ਹੈ。

ਹੁਣ, ਅਸੀਂ test_input() ਫੰਕਸ਼ਨ ਦੇ ਮਾਧਿਅਮ ਨਾਲ ਹਰੇਕ $_POST ਵਾਰੀ ਨੂੰ ਚੈਕ ਕਰ ਸਕਦੇ ਹਾਂ, ਇਹ ਸਕ੍ਰਿਪਟ ਇਸ ਤਰ੍ਹਾਂ ਹੈ:

ਉਦਾਹਰਣ

<?php
// ਵਾਰੀਆਂ ਨੂੰ ਨਾਮ ਦੇਣ ਅਤੇ ਖਾਲੀ ਮੁੱਲ ਸੈਟ ਕਰੋ
$name = $email = $gender = $comment = $website = "";
اگر ($_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"]);
}
فنکشن test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

رن انسٹینس

توجہ دیئے، اسکریپٹ کے شروع میں، ہم نے فرم کو $_SERVER["REQUEST_METHOD"] کے ذریعے کیا جا رہا ہے یا نہیں جانچ لیا ہے۔ اگر REQUEST_METHOD POST ہے تو فرم کو داخل کردیا گیا ہے - اور اس کی جانچ کی جانی چاہئے۔ اگر نہیں داخل کردیا گیا تو جانچ کو چھوڑ دیئے اور خالی فرم کو دکھائیں۔

لیکن، بالا مثال میں، تمام ورودی فیلڈ اختیاری ہیں۔ یعنی اگر استعمال کنندہ کوئی بھی ڈاٹا نہیں داخل کیا، تو اسکریپٹ بھی کورس آئیں گا۔

پچھلے کا قدم یہ ہے کہ ضروری ورودی فیلڈ بنائیں اور اگر ضروری ہو تو غلط پیغامات بنائیں。