Tutorial PHP

RUMAH PHP Pengenalan PHP Instal PHP Sintaks PHP Komentar PHP Variabel PHP PHP Gema / Cetak Tipe Data PHP String PHP Nomor PHP PHP Matematika Konstanta PHP Operator PHP PHP Jika...Lain...Elseif Beralih PHP PHP Loop Fungsi PHP Array PHP PHP Superglobal PHP RegEx

Formulir PHP

Penanganan Formulir PHP Validasi Formulir PHP Diperlukan Formulir PHP URL/Email Formulir PHP Formulir PHP Lengkap

PHP Lanjutan

Tanggal dan Waktu PHP PHP Termasuk Penanganan File PHP File PHP Buka/Baca Membuat/Menulis File PHP Unggah File PHP Cookie PHP Sesi PHP Filter PHP Filter PHP Tingkat Lanjut Fungsi Panggilan Balik PHP PHP JSON Pengecualian PHP

PHP OOP

PHP Apa itu OOP Kelas/Objek PHP Konstruktor PHP Penghancur PHP Pengubah Akses PHP Warisan PHP Konstanta PHP Kelas Abstrak PHP Antarmuka PHP Ciri-ciri PHP Metode Statis PHP Properti Statis PHP Ruang Nama PHP PHP Iterable

Database MySQL

Database MySQL Koneksi MySQL MySQL Buat DB MySQL Buat Tabel MySQL Sisipkan Data MySQL Dapatkan ID Terakhir MySQL Sisipkan Beberapa MySQL Disiapkan MySQL Pilih Data MySQL Dimana MySQL Dipesan Oleh MySQL Hapus Data Data Pembaruan MySQL Data Batas MySQL

PHP XML

PHP XML Parser PHP SimpleXML Parser PHP SimpleXML - Dapatkan PHP XML Ekspat PHP XML DOM

PHP - AJAX

Pengenalan AJAX AJAX PHP Basis Data AJAX AJAX XML Pencarian Langsung AJAX Jajak Pendapat AJAX

Contoh PHP

Contoh PHP Kompilator PHP Kuis PHP Latihan PHP Sertifikat PHP

Referensi PHP

Ikhtisar PHP Array PHP Kalender PHP Tanggal PHP Direktori PHP Kesalahan PHP Pengecualian PHP Sistem File PHP Filter PHP PHP FTP PHP JSON Kata Kunci PHP PHP Libxml Surat PHP PHP Matematika PHP Lain-lain PHP MySQLi Jaringan PHP Kontrol Keluaran PHP PHP RegEx PHP SimpleXML Aliran PHP String PHP Penanganan Variabel PHP PHP XML Parser PHP Zip Zona Waktu PHP

Validasi Formulir PHP


Bab ini dan bab berikutnya menunjukkan cara menggunakan PHP untuk memvalidasi data formulir.


Validasi Formulir PHP

Pikirkan KEAMANAN saat memproses formulir PHP!

Halaman-halaman ini akan menunjukkan cara memproses formulir PHP dengan mempertimbangkan keamanan. Validasi yang tepat dari data formulir penting untuk melindungi formulir Anda dari peretas dan spammer!

Formulir HTML yang akan kita kerjakan dalam bab ini, berisi berbagai bidang input: bidang teks wajib dan opsional, tombol radio, dan tombol kirim:

Aturan validasi untuk formulir di atas adalah sebagai berikut:

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

Pertama kita akan melihat kode HTML biasa untuk formulir:



Bidang Teks

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

Bidang 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

Elemen Bentuk

Kode HTML formulir terlihat seperti ini:

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

Saat formulir dikirimkan, data formulir dikirim dengan metode = "posting".

Apa 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 pada halaman yang sama dengan formulir.

Apa fungsi htmlspecialchars()?

Fungsi htmlspecialchars() mengonversi karakter khusus menjadi entitas HTML. Artinya akan menggantikan karakter HTML seperti < dan > dengan < dan >. Ini mencegah penyerang mengeksploitasi kode dengan menyuntikkan kode HTML atau Javascript (serangan Cross-site Scripting) ke dalam formulir.


Catatan Besar tentang Keamanan Formulir PHP

Variabel $_SERVER["PHP_SELF"] dapat digunakan oleh peretas!

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

Cross-site scripting (XSS) adalah jenis kerentanan keamanan komputer yang biasanya ditemukan di aplikasi Web. XSS memungkinkan penyerang untuk menyuntikkan 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">

Sejauh ini bagus.

Namun, pertimbangkan bahwa pengguna memasukkan URL berikut di bilah alamat:

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 skrip dan perintah peringatan. Dan ketika halaman dimuat, kode JavaScript akan dieksekusi (pengguna akan melihat kotak peringatan). Ini hanyalah contoh sederhana dan tidak berbahaya bagaimana variabel PHP_SELF dapat dieksploitasi.

Ketahuilah bahwa kode JavaScript apa pun dapat ditambahkan di dalam tag <script>! Seorang peretas dapat mengarahkan pengguna ke file di server lain, dan file itu dapat menyimpan kode berbahaya yang dapat mengubah variabel global atau mengirimkan formulir ke alamat lain untuk menyimpan data pengguna, misalnya.


Bagaimana Menghindari Eksploitasi $_SERVER["PHP_SELF"]?

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

Kode formulir akan terlihat seperti ini:

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

Fungsi htmlspecialchars() mengonversi karakter khusus menjadi entitas HTML. Sekarang jika pengguna mencoba mengeksploitasi variabel PHP_SELF, itu akan menghasilkan output berikut:

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

Upaya eksploitasi gagal, dan tidak ada salahnya dilakukan!


Validasi Data Formulir Dengan PHP

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

Saat kita menggunakan fungsi htmlspecialchars(); lalu jika pengguna mencoba mengirimkan yang berikut ini di bidang teks:

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

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

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

Kode sekarang aman untuk ditampilkan di halaman atau di dalam email.

Kami juga akan melakukan dua hal lagi saat pengguna mengirimkan formulir:

  1. Hapus karakter yang tidak perlu (spasi ekstra, tab, baris baru) dari data input pengguna (dengan fungsi PHP trim())
  2. Hapus garis miring terbalik (\) dari data input pengguna (dengan fungsi stripslash PHP())

Langkah selanjutnya adalah membuat fungsi yang akan melakukan semua pemeriksaan untuk kita (yang jauh lebih nyaman daripada menulis kode yang sama berulang-ulang).

Kami akan memberi nama fungsi test_input().

Sekarang, kita dapat memeriksa setiap variabel $_POST dengan fungsi test_input(), dan skripnya 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;
}
?>

Perhatikan bahwa di awal skrip, kami memeriksa apakah formulir telah dikirimkan menggunakan $_SERVER["REQUEST_METHOD"]. Jika REQUEST_METHOD adalah POST, maka formulir telah dikirimkan - dan harus divalidasi. Jika belum terkirim, lewati validasi dan tampilkan formulir kosong.

Namun, dalam contoh di atas, semua kolom input bersifat opsional. Script berfungsi dengan baik bahkan jika pengguna tidak memasukkan data apa pun.

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