Kali ini kita akan mempelajari cara menggunakan PHP untuk memvalidasi data formulir. Show Section Artikel
Validasi Formulir PHPKEAMANAN saat memproses formulir PHP!Halaman-halaman ini akan menunjukkan bagaimana memproses formulir PHP dengan mempertimbangkan keamanan. Validasi data formulir yang tepat penting untuk melindungi formulir dari peretas dan pengirim spam! Formulir HTML yang akan kita kerjakan sekaran akan berisi berbagai bidang masukan: bidang teks wajib dan opsional, tombol radio, dan tombol kirim, seperti di bawah ini: Aturan validasi untuk formulir di atas adalah sebagai berikut:
Sekarang, kita buat kode HTML biasa untuk formulir secara terpisah berdasar pada subnya: Field TeksFields nama, email dan situs web adalah elemen input teks dan bidang komentar adalah area teks. 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 radioFields gender adalah 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 <input type="radio" name="gender" value="other">Other Field Form/FormulirKode HTML formulir terlihat seperti ini: Saat formulir dikirimkan, data formulir dikirim dengan method = “post”. Apa itu variabel $_SERVER [“PHP_SELF”]?$_SERVER [“PHP_SELF”] adalah variabel super global yang mengembalikan nama file dari skrip yang sedang dieksekusi. Jadi, $_SERVER [“PHP_SELF”] mengirimkan data formulir yang dikirimkan ke halaman itu sendiri, alih-alih melompat ke halaman lain. Dengan cara ini, pengguna akan mendapatkan pesan kesalahan di halaman yang sama dengan formulir. Apa itu fungsi htmlspecialchars ()?Fungsi Catatan Besar tentang Keamanan Formulir PHPVariabel $_SERVER [“PHP_SELF”] dapat digunakan oleh peretas! Jika PHP_SELF digunakan di halaman kita, maka pengguna dapat memasukkan garis miring (/) dan kemudian beberapa perintah Cross Site Scripting (XSS) untuk dijalankan. Skrip lintas situs (XSS) adalah jenis kerentanan keamanan komputer yang biasanya ditemukan di aplikasi Web. XSS memungkinkan penyerang memasukkan skrip sisi klien ke halaman Web yang dilihat oleh pengguna lain. Asumsikan kita memiliki formulir berikut di halaman bernama “test_form.php”: <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>"> Sekarang, jika pengguna memasukkan URL normal di bilah alamat seperti “http://www.example.com/test_form.php”, kode di atas akan diterjemahkan ke: <form method="post" action="test_form.php"> Pertimbangkan bahwa pengguna memasukkan URL berikut di bilah alamat:
Dalam hal ini, kode di atas akan diterjemahkan menjadi: <form method="post" action="test_form.php/"><script>alert('hacked')</script> Kode ini menambahkan tag skrip dan perintah peringatan. Dan saat halaman dimuat, kode JavaScript akan dieksekusi (pengguna akan melihat kotak peringatan). Hal ini hanyalah contoh sederhana dan tidak berbahaya bagaimana variabel PHP_SELF dapat dieksploitasi. Ketahuilah bahwa kode JavaScript apa pun dapat ditambahkan di dalam tag Bagaimana Menghindari Eksploitasi $ _SERVER [“PHP_SELF”]?Eksploitasi $_SERVER [“PHP_SELF”] dapat dihindari dengan menggunakan fungsi Kode formulir akan terlihat seperti ini: <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Fungsi <form method="post" action="test_form.php/"><script>alert('hacked')</script>"> Upaya eksploitasi gagal dan tidak ada kerusakan yang dilakukan! Validasi Data Formulir Dengan PHPHal pertama yang akan kita lakukan adalah meneruskan semua variabel melalui fungsi Saat kita menggunakan fungsi
Kode di atas tidak akan dijalankan, karena akan disimpan sebagai kode pelolosan HTML, seperti ini:
Kode Di atas cukup aman untuk ditampilkan di dalam halaman atau di dalam email. Kita juga akan melakukan dua hal lagi saat pengguna mengirimkan formulir:
Langkah selanjutnya adalah membuat fungsi yang akan melakukan semua pemeriksaan untuk kita (yang jauh lebih nyaman daripada menulis kode yang sama berulang kali). Kita akan beri nama fungsi Sekarang, kita dapat memeriksa setiap variabel $_POST dengan fungsi 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; } ?> <!DOCTYPE HTML> <html> <head> </head> <body> <?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; } ?> <h2>PHP Form Validation Example</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Name: <input type="text" name="name"> <br><br> E-mail: <input type="text" name="email"> <br><br> Website: <input type="text" name="website"> <br><br> Comment: <textarea name="comment" rows="5" cols="40"></textarea> <br><br> 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 <br><br> <input type="submit" name="submit" value="Submit"> </form> <?php echo "<h2>Your Input:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> </body> </html> Output : Perhatikan di awal skrip, kita memeriksa apakah formulir telah dikirimkan menggunakan $_SERVER [“REQUEST_METHOD”]. Jika REQUEST_METHOD adalah POST, maka formulir telah dikirim – dan harus divalidasi. Jika belum dikirimkan, lewati validasi dan tampilkan formulir kosong. Namun, pada contoh di atas, semua kolom input bersifat opsional. Skrip berfungsi dengan baik meskipun pengguna tidak memasukkan data apa pun. |