PHP bisa memproses data dari form HTML menggunakan superglobal $_GET dan $_POST.
Form HTML → PHP:
<form method="POST" action="proses.php">
<input name="nama" type="text">
<input name="email" type="email">
<button type="submit">Kirim</button>
</form>
Memproses di PHP:
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$nama = $_POST["nama"] ?? "";
$email = $_POST["email"] ?? "";
// Validasi
if (empty($nama)) {
echo "Nama wajib diisi!";
}
// Sanitize
$nama = htmlspecialchars(trim($nama));
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
}
$_GET vs $_POST:
$_GET— data di URL (?nama=Budi&umur=25)$_POST— data di body request (tidak terlihat di URL)$_REQUEST— gabungan keduanya (jarang dipakai)
Tips keamanan:
- Selalu validasi input server-side
- Gunakan
htmlspecialchars()untuk mencegah XSS - Gunakan
filter_var()untuk sanitize - Gunakan prepared statements untuk query database
CSRF Protection (Cross-Site Request Forgery):
Serangan CSRF terjadi ketika pengguna yang sudah login "ditipu" mengirim request ke aplikasimu dari situs lain. Lindungi form POST dengan token CSRF.
session_start();
// 1. Generate token sekali saat form dirender
if (empty($_SESSION["csrf_token"])) {
$_SESSION["csrf_token"] = bin2hex(random_bytes(32));
}
$token = $_SESSION["csrf_token"];
<form method="POST" action="proses.php">
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($token) ?>">
<!-- field lain -->
</form>
// 2. Verifikasi saat POST diterima
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$kirim = $_POST["csrf_token"] ?? "";
$simpan = $_SESSION["csrf_token"] ?? "";
if (! hash_equals($simpan, $kirim)) {
http_response_code(419);
exit("CSRF token invalid");
}
// aman — proses form
}
Penting: pakai hash_equals() (timing-safe), bukan == untuk menghindari timing attack.