Penggunaan fungsi SANTIZE pada PHP

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Table of Contents

  • filter_var Beraksi
  • Cara menggunakan filter_var
  • Contoh Sanitasi
  • Contoh Memvalidasi
  • Menempatkan Semua Bersama-Sama: Form Submit Email
  • Langkah 1 - Membuat Form
  • Langkah 2 - Tentukan apakah Form sudah Di-submit
  • Langkah 3 - Memvalidasi Field Nama dan Pesan
  • Langkah 4 -- Memvalidasi Field Email
  • Langkah 5 -- Memvalidasi Field Halaman Home
  • Langkah 6 -- Memeriksa Kesalahan dan Mengirimkan Pesan

Validasi data merupakan bagian integral dari bekerja dengan form. Tidak hanya data tidak valid yang dikirimkan dapat menyebabkan masalah keamanan, tetapi juga bisa merusak halaman web Anda. Hari ini, kita akan melihat bagaimana untuk menghapus karakter ilegal dan memvalidasi data dengan menggunakan fungsi "filter_var".

Sebua contoh dapat dilihat di bawah ini. Pengguna telah memasukkan teks "I don't have one" sebagai halaman rumah mereka. Jika data ini dimasukkan ke dalam database dan kemudian diambil sebagai link, link akan rusak.

Penggunaan fungsi SANTIZE pada PHP

Kebanyakan orang cenderung berpikir validasi data sebagai proses sangat membosankan di mana salah satu baik:

  • Membandingkan data yang mereka inginkan untuk melakukan validasi terhadap setiap kemungkinan kombinasi yang dapat mereka pikirkan.
  • Mencoba untuk menemukan emas Regular Expression yang akan cocok dengan setiap kombinasi yang mungkin.
  • Kombinasi dari keduanya.

Ada masalah yang jelas dengan yang tercantum di atas:

  • Itu benar-benar memakan waktu.
  • Ada kesempatan yang sangat tinggi dari kesalahan.

Untungnya, dimulai dengan versi 5.2, PHP telah menyertakan fungsi yang hebat yang disebut filter_var yang mengambil rasa sakit dari validasi data.

filter_var Beraksi

filter_var akan melakukan keduanya, membersihkan dan memvalidasi data. Apa perbedaan antara keduanya?

  • Sanitasi akan menghapus setiap karakter ilegal dari data.
  • Memvalidasi akan menentukan apakah data tersebut dalam bentuk yang tepat.

Catatan: mengapa membersihkan dan tidak hanya memvalidasi? Ini memungkinkan pengguna secara tidak sengaja mengetik karakter yang salah atau mungkin itu dari copy dan paste yang buruk. Dengan sanitasi data, Anda mengambil tanggung jawab untuk berburu kesalahan dari pengguna.

Cara menggunakan filter_var

Menggunakan filter_var sangat mudah. Itu hanya sebuah fungsi PHP yang mengambil dua buah data:

  • Variabel yang ingin Anda periksa
  • Jenis pemeriksaan untuk digunakan

Sebagai contoh, kode di bawah ini akan menghapus semua tag HTML dari string:

$string = "<h2>Hello, World!</h2>";
$new_string = filter_var($string, FILTER_SANITIZE_STRING);
// $new_string is now "Hello, World!"

Berikut adalah contoh lain -- kali ini lebih sulit. Kode di bawah ini akan memastikan nilai dari variabel adalah alamat IP yang valid:

$ip = "127.0.0.1";
$valid_ip = filter_var($ip, FILTER_VALIDATE_IP);
// $valid_ip is TRUE

$ip = "127.0.1.1.1.1";
$valid_ip = filter_var($ip, FILTER_VALIDATE_IP);
// $valid_ip is FALSE

Sesederhana itulah dengan menggunakan filter_var. Untuk daftar lengkap dari semua aturan yang Anda dapat memeriksanya, lihat akhir dari tutorial ini.

Contoh Sanitasi

Di bawah ini adalah contoh cepat dari sanitasi input dari dua field: field email dan field halaman home. Contoh ini akan menghapus setiap karakter yang seharusnya tidak terjadi di kedua jenis data.

<?php
    if (isset($_POST['email'])) {
        echo filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
        echo "<br/><br/>";
    }

    if (isset($_POST['homepage'])) {
        echo filter_var($_POST['homepage'], FILTER_SANITIZE_URL);
        echo "<br/><br/>";
    }
?>

<form name="form1" method="post" action="form-sanitize.php">
    Email Address: <br/>
    <input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="50"/> <br/><br/>
    Home Page: <br/>
    <input type="text" name="homepage" value="<?php echo $_POST['homepage']; ?>" size="50" /> <br/>
    <br/>
    <input type="submit" />
</form>

Dengan menggunakan konstanta FILTER_SANITIZE_EMAIL dan FILTER_SANITIZE_URL yang ditentukan oleh PHP, perkiraan untuk mengetahui karakter apa yang adalah ilegal sudah hilang.

Contoh Memvalidasi

Hanya karena data dibersihkan tidak menjamin bahwa itu diformat dengan benar. Dalam contoh di bawah ini, data-data tidak perlu dibersihkan, tapi itu jelas bahwa masukan pengguna bukanlah email atau url.

Dalam rangka untuk memastikan data diformat dengan benar, itu harus divalidasi.

<?php
    if (isset($_POST['email'])) {
        $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
        if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
            echo "$email is a valid email address.<br/><br/>"; 
        } else {
            echo "$email is <strong>NOT</strong> a valid email address.<br/><br/>";
        }
    }

    if (isset($_POST['homepage'])) {
        $homepage = filter_var($_POST['homepage'], FILTER_SANITIZE_URL);
        if (filter_var($homepage, FILTER_VALIDATE_URL)) {
            echo "$homepage is a valid URL.<br/><br/>";
        } else {
            echo "$homepage is <strong>NOT</strong> a valid URL.<br/><br/>";
        }
    }
?>

<form name="form1" method="post" action="form-validate.php">
Email Address: <br/>
<input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="50"/> <br/><br/>
Home Page: <br/>
<input type="text" name="homepage" value="<?php echo $_POST['homepage']; ?>" size="50" /> <br/>
<br/>
<input type="submit" />
</form>

Sekarang data telah divalidasi, Anda dapat yakin bahwa informasi yang dikirimkan adalah apa yang Anda cari.

Menempatkan Semua Bersama-Sama: Form Submit Email

Sekarang data sanitasi dan validasi yang telah dibahas, kita akan menempatkan keterampilan ini untuk digunakan dengan form pengajuan email cepat. Ini bukanlah berarti sama dengan kualitas produksi -- misalnya, tidak ada form harus memerlukan sebuah halaman home -- tapi itu akan bekerja sempurna untuk tutorial ini. Form akan mengambil 4 buah informasi:

  • Nama
  • Alamat Email
  • Halaman Home
  • Pesan

Kita akan membersihkan dan memvalidasi terhadap semua 4 potongan data dan hanya mengirim email jika mereka semua valid. Jika ada sesuatu yang tidak valid, atau jika ada field yang kosong, form akan disajikan kepada pengguna bersama dengan daftar item untuk diperbaiki. Kita juga akan mengembalikan data yang dibersihkan kepada pengguna dalam hal mereka tidak menyadari bahwa karakter tertentu adalah ilegal.

Langkah 1 - Membuat Form

Untuk langkah pertama, buatlah elemen form dengan 5 field: untuk tercantum di atas dan tombol submit:

<form name="form1" method="post" action="form-email.php">
    Name: <br/>
    <input type="text" name="name" value="<?php echo $_POST['name']; ?>" size="50" /><br/><br/>
    Email Address: <br/>
    <input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="50"/> <br/><br/>
    Home Page: <br/>
    <input type="text" name="homepage" value="<?php echo $_POST['homepage']; ?>" size="50" /> <br/><br/>
    Message: <br/>
    <textarea name="message" rows="5" cols="50"><?php echo $_POST['message']; ?></textarea>
    <br/>
    <input type="submit" name="Submit" />
</form>

Langkah 2 - Tentukan apakah Form sudah Di-submit

Anda dapat memeriksa untuk melihat apakah form itu di-submit dengan melihat apakah tombol submit sudah "set". Letakkan kode berikut di atas form Anda:

if (isset($_POST['Submit'])) {

}

Langkah 3 - Memvalidasi Field Nama dan Pesan

Karena kedua field nama dan pesan akan sama-sama dibersihkan dan divalidasi, kita akan melakukannya bersama-sama. Pertama, periksa jika salah satu field adalah kosong dengan melakukan hal berikut:

if ($_POST['name'] == "")

if ($_POST['message'] == "")

Selanjutnya, membersihkan mereka dengan konstanta FILTER_SANITIZE_STRING

$_POST['name'] = filter_var($_POST['name'], FILTER_SANITIZE_STRING);

$_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);

Akhirnya, periksa untuk memastikan bahwa dua field masih tidak kosong. Ini untuk memastikan bahwa setelah menghapus semua karakter ilegal, Anda tidak meninggalkan field kosong:

if ($_POST['name'] == "")

if ($_POST['message'] == "")

Kita tidak akan melakukan validasi pada dua field hanya karena tidak ada cara mutlak untuk melakukan validasi terhadap Nama atau pesan bebas.

Kode akhir akan terlihat seperti ini:

if ($_POST['name'] != "") {
    $_POST['name'] = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
    if ($_POST['name'] == "") {
        $errors .= 'Please enter a valid name.<br/><br/>';
    }
} else {
    $errors .= 'Please enter your name.<br/>';
}

if ($_POST['message'] != "") {
    $_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);
    if ($_POST['message'] == "") {
        $errors .= 'Please enter a message to send.<br/>';
    }
} else {
    $errors .= 'Please enter a message to send.<br/>';
}

Langkah 4 -- Memvalidasi Field Email

Field email akan dibersihkan dan divalidasi seperti sebelumnya di tutorial.

Pertama, periksa untuk memastikan bahwa ini tidak kosong:

if ($_POST['email'] != "")

Selanjutnya, membersihkannya:

$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

Akhirnya, memvalidasinya sebagai alamat email yang benar:

if (!filter_var($email, FILTER_VALIDATE_EMAIL))

Kode akhir akan terlihat seperti ini:

if ($_POST['email'] != "") {
    $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors .= "$email is <strong>NOT</strong> a valid email address.<br/><br/>";
    }
} else {
    $errors .= 'Please enter your email address.<br/>';
}

Langkah 5 -- Memvalidasi Field Halaman Home

Lagi, field halaman home akan dibersihkan dan divalidasi dengan cara yang sama seperti sebelumnya dalam tutorial.

Pertama, pastikan itu tidak kosong:

if ($_POST['homepage'] != "")

Selanjutnya, membersihkan dan menghapus setiap karakter ilegal:

$homepage = filter_var($_POST['homepage'], FILTER_SANITIZE_URL)

Akhirnya, memvalidasinya untuk memastikan itu URL yang benar:

if (!filter_var($homepage, FILTER_VALIDATE_URL))

Kode akhir akan terlihat seperti ini:

if ($_POST['homepage'] != "") {
    $homepage = filter_var($_POST['homepage'], FILTER_SANITIZE_URL);
    if (!filter_var($homepage, FILTER_VALIDATE_URL)) {
        $errors .= "$homepage is <strong>NOT</strong> a valid URL.<br/><br/>";
    }
} else {
    $errors .= 'Please enter your home page.<br/>';
}

Langkah 6 -- Memeriksa Kesalahan dan Mengirimkan Pesan

Sekarang kita sudah melalui semua field, saatnya untuk melaporkan kesalahan atau mengirim pesan. Memulai dengan asumsi tidak ada kesalahan:

if (!$errors) {

Kemudian membangun pesan email:

$mail_to = '';
$subject = 'New Mail from Form Submission';
$message  = 'From: ' . $_POST['name'] . "\n";
$message .= 'Email: ' . $_POST['email'] . "\n";
$message .= 'Homepage: ' . $_POST['homepage'] . "\n";
$message .= "Message:\n" . $_POST['message'] . "\n\n";

Dan akhirnya, mengirim pesan:

mail($to, $subject, $message);

Namun, jika ada kesalahan, laporkan mereka dan mengharuskan pengguna mencoba lagi:

echo '<div style="color: red">' . $errors . '<br/></div>';

Proyek yang lengkap akan terlihat seperti ini:

<?php

    if (isset($_POST['Submit'])) {

        if ($_POST['name'] != "") {
            $_POST['name'] = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
            if ($_POST['name'] == "") {
                $errors .= 'Please enter a valid name.<br/><br/>';
            }
        } else {
            $errors .= 'Please enter your name.<br/>';
        }

        if ($_POST['email'] != "") {
            $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $errors .= "$email is <strong>NOT</strong> a valid email address.<br/><br/>";
            }
        } else {
            $errors .= 'Please enter your email address.<br/>';
        }

        if ($_POST['homepage'] != "") {
            $homepage = filter_var($_POST['homepage'], FILTER_SANITIZE_URL);
            if (!filter_var($homepage, FILTER_VALIDATE_URL)) {
                $errors .= "$homepage is <strong>NOT</strong> a valid URL.<br/><br/>";
            }
        } else {
            $errors .= 'Please enter your home page.<br/>';
        }

        if ($_POST['message'] != "") {
            $_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);
            if ($_POST['message'] == "") {
                $errors .= 'Please enter a message to send.<br/>';
            }
        } else {
            $errors .= 'Please enter a message to send.<br/>';
        }

        if (!$errors) {
            $mail_to = '';
            $subject = 'New Mail from Form Submission';
            $message  = 'From: ' . $_POST['name'] . "\n";
            $message .= 'Email: ' . $_POST['email'] . "\n";
            $message .= 'Homepage: ' . $_POST['homepage'] . "\n";
            $message .= "Message:\n" . $_POST['message'] . "\n\n";
            mail($to, $subject, $message);

            echo "Thank you for your email!<br/><br/>";
        } else {
            echo '<div style="color: red">' . $errors . '<br/></div>';
        }
    }
?>

<form name="form1" method="post" action="form-email.php">
Name: <br/>
<input type="text" name="name" value="<?php echo $_POST['name']; ?>" size="50" /><br/><br/>
Email Address: <br/>
<input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="50"/> <br/><br/>
Home Page: <br/>
<input type="text" name="homepage" value="<?php echo $_POST['homepage']; ?>" size="50" /> <br/><br/>
Message: <br/>
<textarea name="message" rows="5" cols="50"><?php echo $_POST['message']; ?></textarea>
<br/>
<input type="submit" name="Submit" />
</form>

Ringkasan

Saya harap membaca tutorial ini memberikan Anda sebuah pengenalan yang baik ke fitur penyaringan data baru PHP. Masih ada banyak lagi fungsi dan aturan-aturan yang tidak terbahas, jadi jika Anda tertarik untuk belajar lebih lanjut, silakan lihat bagian Penyaringan Data di manual PHP.

  • Berlangganan ke NETTUTS RSS Feed untuk lebih banyak tutorial dan artikel pengembangan web.