Howto Secure User Input di PHP

By | January 16, 2009

Dalam aplikasi web hal yang paling rawan terhadap security adalah bagian form dimana terdapat user input, karena web form merupakan interface langsung yang berhubungan dengan aplikasi database dan algoritma perhitungan dalam web aplikasi.
Sehingga sangat perlu kita membuat suatu validasi dari input yang dilakukan oleh user melalui web forms ini, apabila tidak ini bisa di pakai untuk serangan SQL Injection  ke aplikasi web kita.

Di PHP kita bisa menggunakan class yang banyak tersedia di internet untuk validasi input user ini, pada tulisan ini saya memilih memakai PEAR Validate Class
Dalam class ini sudah tersedia beberapa fungsi yang bisa digunakan untuk validasi, fungsi-fungsi tersebut antara lain :

1. Fungsi untuk mencek apakah inputan berupa angka atau numerik, dan bisa juga untuk mengecek angka dalam rank tertentu
contoh :

<?php
// include class
include(“Validate.php”);
// initialize input validator
$validate = new Validate();
// initialize error array
$errors = array();
// extract POST-ed variables
extract($_POST);
if (!$validate->number($age, array(“min” => 1, “max” => 99))) {
$errors[] = “Error in AGE field”;


2. Fungsi untuk mengecek apakah inputan berupa string/text dengan panjang text sudah ditentukan
contoh :

// check name field
if (!$validate->string($name, array(“min_length” => 2, “max_length” => 25))) {
$errors[] = “Error in NAME field”;
}

3. Fungsi untuk mengecek apakah inputan format email address benar atau tidak
contoh :

// check e-mail address format
if (!$validate->e-mail($e-mail)) {
$errors[] = “Error in E-MAIL field”;
}

4. Fungsi untuk mengecek apakah inputan format url sudah benar atau tidak
contoh :

// if URL supplied, check URL format
if ($validate->string($url, array(“min_length” => 1))
&& !$validate->uri($url)) {
$errors[] = “Error in URL field”;
}

5. Fungsi untuk mengecek apakah inputan format date sudah benar atau tidak
contoh :

// check name field
if (!$validate->date($date, array(“format” => “%d-%m-%y”))) {
$errors[] = “Error in Date field”;
}

Dengan memvalidasi setiap inputan user dari web forms, ini bisa membantu mengamankan aplikasi web kita.
script lengkapnya seperti di bawah ini :

<html>
<head></head>
<body>
<?php
// include class
include(“Validate.php”);
// initialize input validator
$validate = new Validate();
// initialize error array
$errors = array();
// extract POST-ed variables
extract($_POST);
// check name field
if (!$validate->string($name, array(“min_length” => 1))) {
$errors[] = “Error in NAME field”;
}
// check age field, ensure age is between 1 and 99
if (!$validate->number($age, array(“min” => 1, “max” => 99))) {
$errors[] = “Error in AGE field”;
}
// check e-mail address format
if (!$validate->e-mail($e-mail)) {
$errors[] = “Error in E-MAIL field”;
}
// if URL supplied, check URL format
if ($validate->string($url, array(“min_length” => 1))
&& !$validate->uri($url)) {
$errors[] = “Error in URL field”;
}
// check comment field
if (!$validate->string($comments, array(“min_length” => 1))) {
$errors[] = “Error in COMMENTS field”;
}
// test error array to see if any errors generated
// if so, display error messages
if (sizeof($errors) > 0) {
echo “Your form could not be processed
because of one or more errors (listed below): <br />”;
echo “<ul>”;
foreach ($errors as $e) {
echo “<li>$e</li>”;
}
echo “</ul>”;
// if no errors
// display a success message
} else {
echo “Thank you, your comments have been recorded”;
}
?>
</body>
</html>

moga bermanfaat 🙂