View Categories

PHP Form Validation

8 min read

This and the next chapters show how to use PHP to validate form data.

Энэ болон дараагийн бүлгүүдэд PHP ашиглан маягтын өгөгдлийг хэрхэн баталгаажуулахыг харуулав.


PHP Form Validation #

PHP маягтыг баталгаажуулах #

Think SECURITY when processing PHP forms!

These pages will show how to process PHP forms with security in mind. Proper validation of form data is important to protect your form from hackers and spammers!

Эдгээр хуудсууд нь аюулгүй байдлын үүднээс PHP маягтуудыг хэрхэн боловсруулахыг харуулах болно. Маягтын өгөгдлийг зөв баталгаажуулах нь таны маягтыг хакерууд болон спаммеруудаас хамгаалахад чухал ач холбогдолтой юм!

The HTML form we will be working at in these chapters, contains various input fields: required and optional text fields, radio buttons, and a submit button:

Эдгээр бүлгүүдэд бидний ажиллах HTML хэлбэр нь оролтын талбаруудыг агуулдаг: шаардлагатай ба нэмэлт текст талбарууд, радио товчлуурууд, оруулах товч:

The validation rules for the form above are as follows:

Дээрх маягтыг баталгаажуулах журам дараах байдалтай байна:

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

Нэмэлт. Хэрэв одоо байгаа бол энэ нь зөв URL агуулсан байх ёстой

Comment

Optional. Multi-line input field (textarea)

Нэмэлт. Олон мөр оруулах талбар (текст)

Gender

Required. Must select one

Нэгийг нь сонгох ёстой шаардлагатай.

First we will look at the plain HTML code for the form:

Эхлээд бид маягтын энгийн HTML кодыг үзэх болно.


 

Text Fields #

Текстийн талбарууд #

The name, email, and website fields are text input elements, and the comment field is a textarea. The HTML code looks like this:

Нэр, имэйл, вэбсайтын талбарууд нь текст оруулах элементүүд бөгөөд сэтгэгдэл бичих талбар нь текстийн талбар юм. 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>

Radio Buttons #

Радио товчлуурууд #

The gender fields are radio buttons and the HTML code looks like this:

Хүйсийн талбарууд нь радио товчлуурууд бөгөөд 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

The Form Element #

Маягтын элемент #

The HTML code of the form looks like this:

Маягтын HTML код дараах байдалтай байна:

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

When the form is submitted, the form data is sent with method=”post”

Маягтыг ирүүлэх үед маягтын өгөгдлийг method = “post” -ыг хамт илгээнэ.

What is the $_SERVER[“PHP_SELF”] variable?

The $_SERVER[“PHP_SELF”] is a super global variable that returns the filename of the currently executing script.

$ _SERVER [“PHP_SELF”] нь одоо хэрэгжиж буй скриптийн файлын нэрийг буцаах супер глобал хувьсагч юм.

So, the $_SERVER[“PHP_SELF”] sends the submitted form data to the page itself, instead of jumping to a different page. This way, the user will get error messages on the same page as the form.

Тиймээс, $ _SERVER [“PHP_SELF”] нь өөр хуудас руу үсрэхийн оронд илгээсэн маягтын өгөгдлийг хуудас руу өөрөө илгээдэг. Ингэснээр хэрэглэгч маягттай ижил хуудсан дээр алдааны мэдэгдэл авах болно.

What is the htmlspecialchars() function?

Htmlspecialchars () функц гэж юу вэ?

The htmlspecialchars() function converts special characters to HTML entities. This means that it will replace HTML characters like < and > with < and >. This prevents attackers from exploiting the code by injecting HTML or Javascript code (Cross-site Scripting attacks) in forms.

Htmlspecialchars () функц нь тусгай тэмдэгтүүдийг HTML аж ахуйн нэгж болгон хөрвүүлдэг. Энэ нь < and > with < and >HTML тэмдэгтүүдийг -ээр солино гэсэн үг юм. Энэ нь халдагчид HTML эсвэл Javascript кодыг (Cross-site Scripting attack) хэлбэрээр оруулах замаар кодыг ашиглахаас сэргийлдэг.


Big Note on PHP Form Security #

PHP маягтын аюулгүй байдлын талаархи том тэмдэглэл #

The $_SERVER[“PHP_SELF”] variable can be used by hackers!

$ _SERVER [“PHP_SELF”] хувьсагчийг хакерууд ашиглаж болно!

If PHP_SELF is used in your page then a user can enter a slash (/) and then some Cross Site Scripting (XSS) commands to execute.

Хэрэв таны хуудсанд PHP_SELF-ийг ашиглаж байгаа бол хэрэглэгч налуу зураас (/) оруулаад дараа нь Cross Site Scripting (XSS) командыг оруулж болно.

Cross-site scripting (XSS) is a type of computer security vulnerability typically found in Web applications. XSS enables attackers to inject client-side script into Web pages viewed by other users.

Сайт хоорондын скрипт (XSS) нь ихэвчлэн Вэб програмуудад байдаг компьютерын аюулгүй байдлын эмзэг хэлбэр юм. XSS нь халдагчид бусад хэрэглэгчдийн үзсэн вэб хуудсанд клиент талын скриптийг оруулах боломжийг олгодог.

Assume we have the following form in a page named “test_form.php”:

“Test_form.php” нэртэй хуудсан дээр бид дараахь хэлбэртэй байна гэж үзье.

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

Now, if a user enters the normal URL in the address bar like “http://www.example.com/test_form.php”, the above code will be translated to:

Одоо, хэрэглэгч “http://www.example.com/test_form.php” гэх мэт хаягийн мөрөнд ердийн URL хаягийг оруулбал дээрх кодыг дараахь байдлаар хөрвүүлэх болно.

<form method="post" action="test_form.php">

So far, so good.

Одоогоор маш сайн.

However, consider that a user enters the following URL in the address bar:

Гэсэн хэдий ч, хэрэглэгч хаягийн мөрөнд дараах URL хаягийг оруулна гэдгийг анхаарч үзээрэй:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert(‘hacked’)%3C/script%3E

In this case, the above code will be translated to:

Энэ тохиолдолд дээрх кодыг дараахь байдлаар орчуулна:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

This code adds a script tag and an alert command. And when the page loads, the JavaScript code will be executed (the user will see an alert box). This is just a simple and harmless example how the PHP_SELF variable can be exploited.

Энэ код нь скриптийн шошго болон анхааруулах команд нэмдэг. Хуудсыг ачаалахад JavaScript кодыг гүйцэтгэх болно (хэрэглэгч анхааруулах хайрцаг харах болно). Энэ бол PHP_SELF хувьсагчийг ашиглаж болох энгийн бөгөөд хор хөнөөлгүй жишээ юм.

Be aware of that any JavaScript code can be added inside the

JavaScript кодыг дотор нь нэмж оруулах боломжтой гэдгийг анхаарах хэрэгтэй

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

The htmlspecialchars() function converts special characters to HTML entities. Now if the user tries to exploit the PHP_SELF variable, it will result in the following output:

Htmlspecialchars () функц нь тусгай тэмдэгтүүдийг HTML аж ахуйн нэгж болгон хөрвүүлдэг. Хэрэв одоо хэрэглэгч PHP_SELF хувьсагчийг ашиглахыг оролдвол дараахь үр дүн гарах болно.

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

The exploit attempt fails, and no harm is done!

Ашиглах оролдлого амжилтгүй болж, ямар ч хор хөнөөл учруулахгүй!


Validate Form Data With PHP #

PHP-ийн тусламжтай маягтын өгөгдлийг баталгаажуулах #

The first thing we will do is to pass all variables through PHP’s htmlspecialchars() function.

Бидний хийх хамгийн эхний зүйл бол бүх хувьсагчуудыг PHP-ийн htmlspecialchars () функцээр дамжуулах явдал юм.

When we use the htmlspecialchars() function; then if a user tries to submit the following in a text field:

Бид htmlspecialchars () функцийг ашиглах үед; хэрэв хэрэглэгч текст талбарт дараахь зүйлийг оруулах гэж оролдвол:

– this would not be executed, because it would be saved as HTML escaped code, like this:

– үүнийг гүйцэтгэхгүй, яагаад гэвэл энэ нь HTML-ээс зугтсан код болох тул хадгалагдах болно:

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

The code is now safe to be displayed on a page or inside an e-mail.

Кодыг одоо хуудас эсвэл имэйлийн дотор харуулах нь аюулгүй болжээ.

We will also do two more things when the user submits the form:

Хэрэглэгч маягтыг илгээх үед бид бас хоёр зүйлийг хийх болно.

  1. Strip unnecessary characters (extra space, tab, newline) from the user input data (with the PHP trim() function)

    Хэрэглэгчийн оруулсан өгөгдлөөс шаардлагагүй тэмдэгтүүдийг (нэмэлт зай, таб, шинэ мөр) хуулж (PHP обудтай () функцээр)

  2. Remove backslashes (\) from the user input data (with the PHP stripslashes() function)

    Хэрэглэгчийн оруулсан өгөгдлөөс арын налууг (\) арилгах (PHP зураас зураас () функцээр)

The next step is to create a function that will do all the checking for us (which is much more convenient than writing the same code over and over again).

Дараагийн алхам бол бидний хувьд бүх шалгалтыг хийх функцийг бий болгох явдал юм (энэ нь ижил кодыг дахин дахин бичихээс хамаагүй тохиромжтой).

We will name the function test_input().

Бид функцийг test_input () гэж нэрлэнэ.

Now, we can check each $_POST variable with the test_input() function, and the script looks like this:

Одоо бид $ _POST хувьсагч бүрийг test_input () функцээр шалгаж болох бөгөөд скрипт нь дараах байдалтай байна:

Example #

Жишээ #

<?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; } ?>

Notice that at the start of the script, we check whether the form has been submitted using $_SERVER[“REQUEST_METHOD”]. If the REQUEST_METHOD is POST, then the form has been submitted – and it should be validated. If it has not been submitted, skip the validation and display a blank form.

Скриптийн эхэнд бид маягтыг $ _SERVER [“REQUEST_METHOD”] ашиглан илгээсэн эсэхийг шалгаж байгааг анхаарна уу. Хэрэв REQUEST_METHOD нь POST бол маягтыг илгээсэн болно. Хэрэв ирүүлээгүй бол баталгаажуулалтыг алгасаад хоосон хуудсыг харуулна уу.

However, in the example above, all input fields are optional. The script works fine even if the user does not enter any data.

Гэхдээ дээрх жишээнд бүх оролтын талбарууд заавал байх албагүй. Хэрэглэгч ямар ч мэдээлэл оруулахгүй байсан ч скрипт нь сайн ажилладаг.

The next step is to make input fields required and create error messages if needed.

Дараагийн алхам бол оруулах талбаруудыг шаардлагатай болгож, шаардлагатай бол алдааны мэдэгдэл үүсгэх явдал юм.

Powered by BetterDocs

Leave a Reply