Halaman ini akan
menunjukkan bagaimana proses bentuk PHP dengan keamanan Validasi yang tepat
dari bentuk data penting untuk melindungi formulir Anda dari hacker dan
spammer! Bentuk HTML kita akan bekerja di dalam pasal-pasal ini, mengandung
berbagai bidang masukan: diperlukan dan bidang Text Fields , Radio Buttons, dan
submit buttons:
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 untuk form:
Text Fields
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>
Radio Button
Bidang gender radio
buttuon dan kode HTML terlihat seperti ini:
Gender:
<input
type="radio" name="gender"
value="female">Female
<input
type="radio" name="gender" value="male">Male
The Form Element
Kode HTML
formulir 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?
$ _SERVER
["PHP_SELF"] adalah variabel yang super global 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.
Apa Fungsi
htmlspecialchars () ?
Fungsi
htmlspecialchars () mengkonversi karakter khusus untuk entitas HTML. Ini
berarti bahwa itu akan menggantikan karakter HTML seperti <dan> dengan
& lt; dan & gt;. Hal ini mencegah penyerang dari mengeksploitasi kode
dengan menyuntikkan HTML atau kode Javascript (serangan Scripting Cross-site)
dalam bentuk.
Catatan Penting
untuk Keamanan Form PHP
Variabel $
_SERVER ["PHP_SELF"] dapat digunakan oleh hacker! Jika PHP_SELF
digunakan dalam halaman Anda maka pengguna dapat memasukkan sebuah 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 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 yang normal di address bar seperti
"http://www.example.com/test_form.php", kode di atas akan
diterjemahkan ke:
<form
method="post" action="test_form.php">
Namun,
mempertimbangkan bahwa pengguna memasukkan URL berikut di address bar:
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 halaman dijalankan,
kode JavaScript akan dieksekusi (pengguna akan melihat kotak peringatan). Ini
hanya contoh sederhana dan tidak berbahaya bagaimana variabel PHP_SELF dapat
dimanfaatkan.
Menyadari bahwa
kode JavaScript dapat ditambahkan dalam tag <script>! 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 mencegah
Eksploitasi $ _SERVER ["PHP_SELF?
Eksploitas $
_SERVER ["PHP_SELF"] dapat dihindari dengan menggunakan fungsi
htmlspecialchars ().
Kode bentuk akan
terlihat seperti ini:
<form
method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Fungsi
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/"><script>alert('hacked')</script>">
Form Validasi
Data pada PHP
Hal pertama yang
akan kita lakukan adalah untuk lulus semua variabel melalui fungsi
htmlspecialchars PHP (). Ketika kita menggunakan fungsi htmlspecialchars () ;
maka jika pengguna mencoba untuk mengirimkan berikut dalam kolom teks:
<Script>
location.href ('http://www.hacked.com') </ script>
Ini tidak akan
dieksekusi, karena akan disimpan sebagai kode HTML , seperti ini:
& Lt; script
yang & gt; location.href ('http://www.hacked.com') & lt; / script &
gt;
Kode ini sekarang
aman untuk ditampilkan pada halaman atau di dalam sebuah e-mail.
Jalur karakter
yang tidak perlu (tambahan ruang, tab, baris baru) dari data input pengguna
(dengan Fungsi PHP lis () ). Hapus backslashes (\) dari data input pengguna
(dengan fungsi stripslashes PHP () ). Langkah berikutnya adalah untuk
menciptakan sebuah fungsi yang akan melakukan semua pemeriksaan bagi kita (yang
jauh lebih mudah daripada menulis kode yang sama berulang-ulang).
Kita beri nama
fungsi test_input (). Sekarang, kita dapat memeriksa setiap variabel $ _POST
dengan test_input () fungsi, dan script terlihat seperti ini:
<!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
<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>
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 opsional. Script bekerja dengan baik bahkan
jika pengguna tidak memasukkan data apapun.
Pelajari Juga tutorial PHP Data Object lainnya berikut ini ;
Membuat Koneksi ke Database dengan PDO
Salam...,
No comments:
Post a Comment