Keamanan Website vanJogja: Langkah Nyata Melindungi Data & Mencegah Deface
Bagaimana vanJogja mengamankan server web: HTTPS, security headers, CSRF token, IP rate limiting, WAF rules, dan perlindungan direktori admin dari serangan deface dan brute force.
Keamanan website bukan sekadar fitur tambahan — ini adalah fondasi kepercayaan. Di vanJogja, kami secara aktif melakukan audit dan penguatan keamanan server secara berkala. Artikel ini mendokumentasikan langkah-langkah nyata yang sudah kami terapkan langsung di server produksi.
1. Migrasi dari FTP ke SFTP
Langkah pertama yang kami lakukan adalah mengganti protokol transfer file dari FTP biasa ke SFTP (SSH File Transfer Protocol). FTP standar mengirim username dan password dalam bentuk teks polos di jaringan, sehingga sangat rentan disadap.
Dengan SFTP di port khusus, seluruh proses transfer file — termasuk deployment kode — kini dienkripsi secara penuh. Tidak ada satu pun kredensial yang berpindah dalam bentuk teks polos.
2. Security Headers di .htaccess
Kami menambahkan serangkaian HTTP security headers yang melindungi pengunjung dari berbagai jenis serangan sisi browser:
- X-Frame-Options: SAMEORIGIN — mencegah halaman vanJogja dibuka dalam iframe situs lain (clickjacking)
- X-Content-Type-Options: nosniff — mencegah browser menebak tipe konten secara sembarangan
- Strict-Transport-Security — memaksa browser selalu menggunakan HTTPS selama 1 tahun
- Referrer-Policy — membatasi informasi yang dikirim ke situs eksternal saat ada klik tautan
- Permissions-Policy — menonaktifkan akses ke kamera, mikrofon, GPS, dan payment API yang tidak dibutuhkan
- Content-Security-Policy (CSP) — membatasi sumber script, style, dan gambar hanya dari domain yang diizinkan
Selain itu, header X-Powered-By dan Server yang biasanya mengekspos versi PHP dan nama web server kini disembunyikan sepenuhnya.
3. CSRF Protection pada Semua Form Publik
Cross-Site Request Forgery (CSRF) adalah serangan di mana situs jahat membuat browser pengunjung mengirimkan request ke situs Anda tanpa sepengetahuan pengguna. Kami menambahkan CSRF token pada seluruh form publik:
- Form kontak (/hubungi)
- Form login member
- Form registrasi member
Setiap request POST kini memverifikasi token unik yang hanya diketahui oleh server dan browser pengguna yang sah. Request tanpa token valid akan langsung ditolak dengan HTTP 419.
4. Session Security — Cookie Flags yang Tepat
Session cookie admin dan member kini dikonfigurasi dengan flag keamanan yang eksplisit:
- HttpOnly — cookie tidak dapat dibaca oleh JavaScript, mencegah pencurian session via XSS
- Secure — cookie hanya dikirim melalui koneksi HTTPS
- SameSite: Strict — cookie tidak akan dikirim bersama request lintas situs
- Strict Mode — server menolak session ID yang tidak diinisiasi olehnya sendiri
5. Proteksi Anti-Deface: WAF Rules
Serangan deface seringkali diawali oleh scanner otomatis yang mencari celah. Kami menambahkan Web Application Firewall (WAF) rules langsung di .htaccess untuk memblokir:
- Scanner otomatis seperti Nikto, SQLMap, Nuclei, Nmap, Acunetix, dan sejenisnya
- Request tanpa User-Agent — ciri khas bot primitif
- Query string berbahaya — pola seperti
?cmd=,?exec=, path traversal, null byte, dan remote file include - Upload webshell via POST — request yang mengandung tag PHP di body
Folder upload juga sudah dikonfigurasi untuk memblokir eksekusi file PHP, sehingga webshell yang berhasil terupload pun tidak dapat dijalankan.
6. Proteksi Brute Force Login Admin
Panel admin kini dilindungi oleh sistem anti-brute force berlapis:
- Per-akun lockout — 5 kali salah maka akun terkunci 30 menit
- IP-based rate limiting — 10 kali gagal dari IP yang sama (termasuk username tidak valid) maka IP diblokir 15 menit secara otomatis
- Sleep delay — setiap attempt gagal mendapat jeda 1 detik, membatasi kecepatan serangan secara signifikan
- CAPTCHA — menghambat serangan otomatis
- Audit log — setiap percobaan login berhasil maupun gagal dicatat beserta IP dan user agent
Celah yang sebelumnya ada: attacker bisa mencoba ribuan username berbeda tanpa pernah kena lockout, karena lockout hanya berlaku per-akun yang ada di database. IP-based rate limiting menutup celah tersebut secara menyeluruh.
7. Sanitasi Pesan Error Database
Detail error dari database — seperti nama tabel, struktur query, atau pesan MySQL — sebelumnya berpotensi terekspos ke pengguna saat terjadi kegagalan proses. Kini, pesan tersebut hanya dikirim ke error log server, sementara pengguna hanya melihat pesan generik yang aman.
Kesimpulan
Keamanan adalah proses berkelanjutan, bukan kondisi final. Setiap lapisan yang kami tambahkan — dari enkripsi transfer file, proteksi browser, validasi form, hingga pembatasan akses — bekerja bersama untuk mempersempit permukaan serangan.
Jika Anda menggunakan platform web dari vanJogja, semua lapisan keamanan ini sudah aktif secara otomatis di server Anda. Kami terus memperbarui dan meningkatkan standar keamanan seiring berkembangnya ancaman digital.
Website aman bukan privilese — ini standar minimum yang semua bisnis online berhak dapatkan.