Sanitasi input dan output dalam PHP adalah pertahanan utama untuk mencegah kerentanan Cross-Site Scripting (XSS), di mana penyerang menyisipkan skrip berbahaya ke dalam halaman web yang dilihat oleh pengguna lain. Pencegahan XSS paling efektif dilakukan saat data ditampilkan kembali ke browser (output encoding) menggunakan fungsi htmlspecialchars(), serta dengan menyaring data masuk menggunakan filter_var().
Metode Utama Pencegahan XSS di PHP
Untuk mengamankan aplikasi web dari serangan XSS, pengembang wajib menerapkan teknik validasi, sanitasi, dan escaping yang tepat. Berikut adalah tabel perbandingan fungsi keamanan bawaan PHP yang paling sering digunakan:
| Fungsi PHP | Kegunaan Utama | Contoh Penggunaan |
|---|---|---|
htmlspecialchars() |
Mengubah karakter khusus (<, >, &, ", ') menjadi entitas HTML. Wajib digunakan saat mencetak data ke browser. | echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); |
strip_tags() |
Menghapus seluruh tag HTML dan PHP dari string input. | echo strip_tags($input); |
filter_var() |
Memvalidasi dan menyaring data berdasarkan tipe tertentu (email, URL, integer, dll). | filter_var($email, FILTER_SANITIZE_EMAIL); |
Contoh Implementasi Kode PHP Aman
Berikut adalah contoh skrip PHP sederhana namun aman untuk menerima input dari form pengguna dan menampilkannya kembali tanpa risiko eksekusi skrip berbahaya:
<?php
// Memeriksa apakah data POST tersedia
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Sanitasi input email
$email_input = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
// Validasi email
if (filter_var($email_input, FILTER_VALIDATE_EMAIL)) {
// Output dengan escaping aman terhadap XSS
echo "Email valid yang diterima: " . htmlspecialchars($email_input, ENT_QUOTES, 'UTF-8');
} else {
echo "Format email tidak valid!";
}
}
?>
<form method="POST" action="">
<label for="email">Masukkan Email:</label>
<input type="text" name="email" id="email">
<button type="submit">Kirim</button>
</form>
Praktik Terbaik Keamanan Web PHP
Selain menggunakan fungsi di atas, pastikan untuk selalu mengatur header HTTP keamanan yang tepat, seperti Content Security Policy (CSP), untuk membatasi sumber eksekusi skrip di browser pengguna. Jangan pernah mempercayai data apa pun yang dikirimkan oleh pengguna (Never trust user input), baik melalui metode GET, POST, maupun Cookie.