Membersihkan Input Pengguna
Hapus karakter berbahaya dengan htmlspecialchars dan filter_input.
Membersihkan Input Pengguna adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.
Sanitasi dan Validasi
Validasi memeriksa apakah data memenuhi persyaratan (dan menolaknya jika tidak).
Sanitasi membersihkan data dengan menghapus atau menyandikan karakter berbahaya agar data tersebut aman digunakan.
Keduanya diperlukan — lakukan validasi terlebih dahulu, lalu sanitasi untuk keluaran.
htmlspecialchars() untuk Keluaran HTML
Selalu lakukan escape pada keluaran sebelum memasukkannya ke dalam HTML untuk mencegah XSS:
<?php
$name = '<script>alert(1)</script>';
// Dangerous — executes script:
// echo $name;
// Safe:
echo htmlspecialchars($name, ENT_QUOTES | ENT_HTML5, 'UTF-8');
// <script>alert(1)</script>htmlentities() vs htmlspecialchars()
Keduanya melakukan escape pada HTML, tetapi htmlentities mengonversi SEMUA karakter yang sesuai; htmlspecialchars hanya mengonversi lima karakter yang paling berbahaya:
<?php
$str = '<b>café</b> & "bar"';
// htmlspecialchars: only & < > ' "
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
// htmlentities: also converts é → é
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
// Prefer htmlspecialchars — htmlentities can break UTF-8filter_var FILTER_SANITIZE_*
Mode sanitasi filter_var menghapus konten berbahaya:
<?php
$rawEmail = 'user(bad)@exam<ple.com';
$clean = filter_var($rawEmail, FILTER_SANITIZE_EMAIL);
echo $clean; // user@example.com
$rawUrl = 'http://exa mple.com/pa th?q=foo bar';
$cleanUrl = filter_var($rawUrl, FILTER_SANITIZE_URL);
echo $cleanUrl;strip_tags()
Hapus tag HTML dari sebuah string, dengan opsi untuk mempertahankan tag yang diizinkan:
<?php
$input = '<p>Hello <b>World</b> <script>alert(1)</script></p>';
// Remove all tags:
echo strip_tags($input);
// Hello World alert(1)
// Keep only <b> and <i>:
echo strip_tags($input, '<b><i>');
// Hello <b>World</b>Sanitasi untuk SQL
Jangan pernah melakukan sanitasi SQL dengan fungsi string — selalu gunakan pernyataan terparametrisasi. Pendekatan yang benar:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
// WRONG — even with addslashes this is dangerous:
// $sql = "SELECT * FROM users WHERE email = '" . addslashes($email) . "'";
// CORRECT — prepared statement:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute([':email' => $email]);
$user = $stmt->fetch();addslashes() vs Pernyataan Terparametrisasi
addslashes() melakukan escape pada garis miring terbalik dan tanda kutip — tetapi fungsi tersebut TIDAK aman untuk SQL. Sebagai gantinya, gunakan pernyataan terparametrisasi PDO. addslashes() tetap berguna untuk tujuan non-SQL, seperti membuat string JavaScript:
<?php
// For embedding PHP string into JavaScript (still escape via json_encode):
$jsData = json_encode(['name' => $userInput], JSON_HEX_QUOT);
echo "<script>var data = $jsData;</script>";Sanitasi Nama Berkas
Hapus karakter berbahaya dari nama berkas yang diunggah:
<?php
function sanitizeFilename(string $name): string {
// Remove path traversal chars and other dangerous ones
$name = basename($name); // strip any path
$name = preg_replace('/[^a-zA-Z0-9._-]/', '_', $name); // only safe chars
$name = preg_replace('/_{2,}/', '_', $name); // collapse underscores
return strtolower($name);
}
echo sanitizeFilename('../../../etc/passwd'); // etc_passwd
echo sanitizeFilename('My Photo (1).JPG'); // my_photo_1_.jpgPemeran Bilangan Bulat untuk ID
Sanitasi paling sederhana untuk ID numerik — lakukan pemeranan ke int, yang membuang semua konten nonnumerik:
<?php
// Never do this:
$id = $_GET['id'];
$sql = "SELECT * FROM posts WHERE id = $id";
// Safe approach 1: cast to int
$id = (int) ($_GET['id'] ?? 0);
if ($id <= 0) die('Invalid ID');
// Safe approach 2: validate
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if (!$id) die('Invalid ID');Konteks Keluaran Penting
Konteks keluaran yang berbeda memerlukan escape yang berbeda:
- Badan HTML →
htmlspecialchars() - Atribut HTML →
htmlspecialchars(ENT_QUOTES) - JSON/JavaScript →
json_encode() - Parameter URL →
urlencode() - SQL → pernyataan terparametrisasi
urlencode dan rawurlencode
Enkode nilai untuk digunakan dalam URL:
<?php
$search = 'hello world & PHP';
echo urlencode($search);
// hello+world+%26+PHP (+ for spaces)
echo rawurlencode($search);
// hello%20world%20%26%20PHP (RFC 3986 — use in paths)
$url = 'https://example.com/search?q=' . urlencode($search);
echo $url;Pemeriksaan Singkat
Fungsi mana yang merupakan cara yang benar untuk mencegah injeksi SQL saat menggunakan masukan pengguna dalam kueri basis data?
Rangkuman: Sanitasi Masukan
Aturan sanitasi:
- Keluaran HTML →
htmlspecialchars(ENT_QUOTES, 'UTF-8') - SQL → pernyataan terparametrisasi, jangan pernah melakukan escape string
- URL →
urlencode()ataurawurlencode() - Nama berkas → hapus dengan regex, gunakan
basename() - ID bilangan bulat → lakukan pemeranan dengan
(int) - Tag →
strip_tags()untuk memfilter tag yang diizinkan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membersihkan Input Pengguna” gratis?
Ya — teks lengkap “Membersihkan Input Pengguna” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membersihkan Input Pengguna”?
Hapus karakter berbahaya dengan htmlspecialchars dan filter_input. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai PHP Academy?
Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Membersihkan Input Pengguna” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- GET vs POST: Kapan Menggunakan Masing-Masing
- Membaca Data Formulir dengan Superglobal
- Teknik Validasi Input
- Membersihkan Input Pengguna