tutorial pengembangan web terbaru
 

PHP 5 Form Validasi


Ini dan bab-bab berikutnya menunjukkan bagaimana menggunakan PHP untuk memvalidasi data formulir.


PHP Form Validasi

Pikirkan KEAMANAN saat memproses bentuk PHP!

Halaman ini akan menunjukkan cara untuk memproses bentuk PHP dengan keamanan dalam pikiran. validasi yang tepat dari bentuk data penting untuk melindungi formulir Anda dari hacker dan spammer!

Bentuk HTML kita akan bekerja di dalam bab-bab ini, berisi berbagai bidang masukan: diperlukan dan bidang opsional teks, tombol radio, dan sebuah tombol submit:

Aturan validasi untuk formulir di atas adalah sebagai berikut:

Bidang Aturan validasi
Nama Wajib. + Harus hanya berisi huruf dan spasi
E-mail Wajib. + Harus berisi alamat email yang valid (with @ and .)
Situs web Pilihan. Jika ada, itu harus berisi URL yang valid
Komentar Pilihan. Bidang input multi-line (textarea)
Jenis kelamin Wajib. Harus pilih salah satu

Pertama kita akan melihat kode HTML untuk form:


Fields teks

Nama, email, dan bidang situs adalah elemen input teks, dan kolom komentar adalah textarea. Kode HTML terlihat seperti ini:

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>

Tombol radio

Bidang gender tombol radio dan kode HTML terlihat seperti ini:

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

Formulir Element

Kode HTML dalam bentuk terlihat seperti ini:

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

Ketika formulir dikirimkan, data formulir dikirim dengan metode = "post".

Apa $ _SERVER [ "PHP_SELF"] variabel?

The $ _SERVER [ "PHP_SELF"] adalah variabel global super yang mengembalikan nama file dari script saat ini mengeksekusi.

Jadi, $ _SERVER [ "PHP_SELF"] mengirimkan data formulir diserahkan ke halaman itu sendiri, bukannya melompat ke halaman yang berbeda. Dengan cara ini, pengguna akan mendapatkan pesan error pada halaman yang sama seperti formulir.

Apa htmlspecialchars() function?

The htmlspecialchars() fungsi mengkonversi karakter khusus untuk entitas HTML. Ini berarti bahwa hal itu akan menggantikan karakter HTML seperti <dan> dengan & lt; dan & gt ;. Hal ini mencegah penyerang dari mengeksploitasi kode dengan menyuntikkan HTML atau kode Javascript (Cross-site Scripting attacks) dalam bentuk.


Big Catatan tentang PHP Form Keamanan

The $ _SERVER [ "PHP_SELF"] variabel dapat digunakan oleh hacker!

Jika PHP_SELF digunakan dalam halaman Anda maka pengguna dapat memasukkan garis miring (/) dan kemudian beberapa Cross Site Scripting (XSS) perintah untuk mengeksekusi.

Cross-site scripting (XSS) adalah jenis kerentanan keamanan komputer biasanya ditemukan dalam aplikasi Web. XSS memungkinkan penyerang untuk menyuntikkan script sisi klien ke dalam halaman Web dilihat oleh pengguna lain.

Asumsikan kita memiliki bentuk berikut di halaman bernama "test_form.php" :

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

Sekarang, jika pengguna memasukkan URL normal pada address bar seperti "http://www.example.com/test_form.php" , kode di atas akan diterjemahkan ke:

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

Sejauh ini bagus.

Namun, mempertimbangkan bahwa pengguna memasukkan URL berikut di address bar:

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

Dalam hal ini, kode di atas akan diterjemahkan ke:

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

Kode ini menambahkan tag script dan perintah peringatan. Dan ketika beban halaman, kode JavaScript akan dieksekusi (the user will see an alert box) . Ini hanya contoh sederhana dan tidak berbahaya bagaimana variabel PHP_SELF dapat dimanfaatkan.

Menyadari bahwa kode JavaScript dapat ditambahkan di dalam <script> tag! Seorang hacker dapat mengarahkan pengguna ke file di server lain, dan file yang dapat menyimpan kode berbahaya yang dapat mengubah variabel global atau menyerahkan formulir ke alamat lain untuk menyimpan data pengguna, misalnya.


Cara Hindari $ _SERVER [ "PHP_SELF"] Eksploitasi?

$ _SERVER [ "PHP_SELF"] eksploitasi dapat dihindari dengan menggunakan htmlspecialchars() fungsi.

Kode bentuk akan terlihat seperti ini:

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

The htmlspecialchars() fungsi mengkonversi karakter khusus untuk entitas HTML. Sekarang jika pengguna mencoba untuk mengeksploitasi variabel PHP_SELF, itu akan menghasilkan output sebagai berikut:

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

Mengeksploitasi upaya gagal, dan tidak ada salahnya dilakukan!


Validasi Form Data Dengan PHP

Hal pertama yang akan kita lakukan adalah untuk lulus semua variabel melalui PHP htmlspecialchars() fungsi.

Ketika kita menggunakan htmlspecialchars() fungsi; maka jika pengguna mencoba untuk menyerahkan berikut dalam kolom teks:

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

- ini tidak akan dieksekusi, karena itu akan disimpan sebagai HTML lolos kode, seperti ini:

& Lt; script yang & gt; lokasi. href('http://www.hacked.com') & lt; / script & gt;

Kode ini sekarang aman untuk ditampilkan pada halaman atau di dalam e-mail.

Kami juga akan melakukan dua hal lebih ketika pengguna menyerahkan formulir:

  1. Jalur karakter yang tidak perlu (extra space, tab, newline) dari data input pengguna (with the PHP trim() function)
  2. Hapus backslashes (\) dari data input pengguna (with the PHP stripslashes() fungsi)

Langkah selanjutnya adalah membuat fungsi yang akan melakukan semua pengecekan untuk kita (which is much more convenient than writing the same code over and over again) .

Kami akan nama fungsi test_input() .

Sekarang, kita dapat memeriksa setiap variabel $ _POST dengan test_input() fungsi, dan script terlihat seperti ini:

Contoh

<?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;
}
?>
Menjalankan contoh »

Perhatikan bahwa pada awal script, kita memeriksa apakah formulir telah disampaikan menggunakan $ _SERVER [ "REQUEST_METHOD"]. Jika REQUEST_METHOD adalah POST, maka formulir telah disampaikan - dan itu harus divalidasi. Jika belum diajukan, melewatkan validasi dan menampilkan formulir kosong.

Namun, dalam contoh di atas, semua bidang input adalah opsional. Script bekerja dengan baik bahkan jika pengguna tidak memasukkan data apapun.

Langkah selanjutnya adalah membuat field input yang dibutuhkan dan membuat pesan kesalahan jika diperlukan.