Ketika website tiba-tiba menampilkan halaman asing, mengirim spam, atau membuat akun administrator baru, reaksi pertama biasanya adalah panik. Pemilik situs ingin segera menghapus file mencurigakan, memasang ulang WordPress, atau mengganti semua password sekaligus.
Masalahnya, tindakan terburu-buru bisa menghilangkan jejak penting. Anda mungkin berhasil menghapus gejala, tetapi tidak mengetahui pintu masuk penyerang atau apakah masih ada akses tersembunyi. Respons insiden yang baik bukan sekadar membuat website kembali tampil normal, melainkan membatasi kerusakan, mencari sumber masalah, lalu memulihkan sistem dengan dasar yang lebih aman.
1. Pastikan ini benar-benar insiden keamanan
Tidak semua error adalah tanda website diretas. Tema yang rusak, plugin yang gagal diperbarui, konfigurasi cache, atau perubahan DNS juga dapat membuat halaman terlihat aneh.
Namun, perlakukan situasi sebagai insiden keamanan jika menemukan tanda seperti:
- Ada akun administrator, file PHP, atau plugin yang tidak pernah Anda buat.
- Pengunjung diarahkan ke situs perjudian, phishing, atau halaman unduhan mencurigakan.
- Website mengirim email dalam jumlah besar tanpa aktivitas yang jelas.
- Password admin tiba-tiba tidak bisa digunakan.
- File inti berubah tanpa jadwal pembaruan.
- Hosting atau mesin pencari memberi peringatan malware.
Simpan screenshot, waktu kejadian, URL yang terdampak, dan pesan error. Catatan sederhana ini membantu membandingkan kondisi website sebelum dan sesudah pemulihan.
2. Batasi akses tanpa langsung menghapus bukti
Jika website masih aktif digunakan, langkah pertama adalah mengurangi kemungkinan kerusakan meluas. Hubungi penyedia hosting dan minta bantuan untuk menempatkan situs dalam mode pemeliharaan atau membatasi akses sementara.
Untuk website yang memiliki data sensitif, Anda juga dapat menonaktifkan sementara fitur login, formulir, atau transaksi. Jangan langsung menghapus seluruh folder website. File mencurigakan, log server, waktu perubahan file, dan daftar proses yang berjalan dapat membantu menemukan pola serangan.
Jika masih bisa masuk ke dashboard, jangan hanya mengganti password satu akun. Periksa daftar pengguna, peran setiap akun, email pemulihan, token aplikasi, dan sesi login aktif. Hapus akun yang tidak dikenal setelah informasi dasarnya dicatat.
3. Putuskan akses yang mungkin sudah bocor
Setelah bukti awal dikumpulkan, ubah kredensial dari perangkat yang dipastikan bersih. Jangan mengganti password melalui komputer yang dicurigai terkena malware atau keylogger.
Prioritaskan akses berikut:
- Akun administrator website.
- Akun hosting dan panel server.
- Akun FTP, SFTP, atau SSH.
- Password database.
- Akun email yang dipakai untuk pemulihan.
- API key, application password, dan token integrasi.
Gunakan password unik dan aktifkan autentikasi dua faktor untuk akun administrator. WordPress juga menyarankan pembaruan rutin, pembatasan akses, dan perencanaan pemulihan sebagai bagian dari keamanan berkelanjutan, bukan tindakan sekali selesai.
4. Cari jalur masuk yang paling mungkin
Tujuan pemeriksaan bukan mencari siapa penyerangnya, melainkan menemukan kelemahan yang harus ditutup sebelum website dipulihkan.
Periksa beberapa kemungkinan umum:
- Plugin, tema, WordPress core, PHP, atau komponen server yang kedaluwarsa.
- Password administrator yang dipakai ulang di layanan lain.
- Akun hosting atau FTP yang tidak lagi digunakan tetapi masih aktif.
- File upload yang menerima ekstensi berbahaya atau tidak membatasi tipe file.
- Endpoint API atau formulir yang tidak memvalidasi input.
- Query database yang menyusun SQL dari input pengguna secara langsung.
Pada aplikasi kustom, gunakan prepared statement untuk query database dan lakukan validasi input berbasis allow-list jika memungkinkan. Untuk output ke halaman web, data dari pengguna harus di-escape sesuai konteksnya. OWASP menekankan bahwa pencegahan XSS bukan hanya soal memasang WAF, tetapi juga memastikan data tidak tepercaya diproses dan ditampilkan dengan aman.
5. Periksa log dan perubahan file
Log dapat membantu menjawab tiga pertanyaan penting: kapan aktivitas mencurigakan dimulai, endpoint apa yang dipanggil, dan akun mana yang digunakan.
Jika tersedia, periksa access log, error log, log autentikasi, aktivitas dashboard, perubahan file, serta notifikasi dari firewall atau CDN. Cari pola seperti banyak percobaan login, request ke file yang tidak biasa, upload berulang, atau akses dari lokasi dan waktu yang tidak masuk akal.
Bandingkan file website dengan salinan bersih dari sumber resmi. Jangan menganggap setiap file asing otomatis berbahaya, karena beberapa plugin memang membuat file tambahan. Sebaliknya, jangan menganggap file yang namanya terlihat normal pasti aman.
6. Pulihkan dari sumber yang dapat dipercaya
Jika tersedia backup sebelum waktu kompromi, gunakan backup tersebut sebagai titik pemulihan. Pastikan backup tidak ikut terhubung ke sistem yang sedang terinfeksi dan periksa tanggalnya dengan hati-hati. Backup yang dibuat setelah penyerang masuk bisa saja sudah mengandung file atau akun berbahaya.
Untuk WordPress, proses pemulihan idealnya mencakup WordPress core, tema, plugin, database, dan konfigurasi server. Instal ulang komponen dari sumber resmi, lalu pasang hanya plugin dan tema yang benar-benar diperlukan. Plugin atau tema nulled sebaiknya tidak digunakan karena asal-usul dan integritas kodenya tidak dapat dipercaya.
Setelah pemulihan, ganti kembali semua kredensial penting. Jangan memakai password lama meskipun belum terlihat disalahgunakan.
7. Kerasikan sistem setelah website kembali online
Website yang sudah tampil normal belum tentu sudah aman. Lakukan pemeriksaan lanjutan sebelum membuka semua fitur untuk publik.
- Perbarui WordPress, plugin, tema, PHP, dan komponen server.
- Hapus plugin, tema, akun, dan layanan yang tidak digunakan.
- Nonaktifkan editor file bawaan WordPress dengan
define( 'DISALLOW_FILE_EDIT', true );jika tidak dibutuhkan. - Batasi hak akses database sesuai kebutuhan aplikasi. Akun aplikasi tidak seharusnya memiliki hak administrator database.
- Pastikan website dan area administrasi memakai HTTPS.
- Aktifkan monitoring perubahan file dan notifikasi login.
- Simpan backup berkala di lokasi terpisah dan uji proses restore secara berkala.
Untuk aplikasi PHP yang menggunakan session, periksa juga pengaturan cookie seperti HttpOnly, Secure, dan SameSite. Pengaturan ini membantu mengurangi risiko pencurian atau penyalahgunaan session, tetapi tidak menggantikan validasi akses dan pengelolaan session yang benar.
Apa artinya bagi kita?
Respons insiden bukan pekerjaan eksklusif perusahaan besar. Blog pribadi, toko online kecil, dan website organisasi juga perlu memiliki urutan tindakan yang jelas. Minimal, Anda harus tahu siapa yang bisa mengakses hosting, di mana backup disimpan, bagaimana cara menonaktifkan website, dan kapan harus meminta bantuan profesional.
Checklist sederhana yang disimpan sebelum masalah terjadi sering lebih berguna daripada puluhan plugin keamanan. Keamanan bukan berarti menjamin website tidak pernah diserang. Tujuannya adalah memperkecil peluang serangan, membatasi dampaknya, dan memastikan website bisa dipulihkan tanpa menebak-nebak dari awal.
Yang bisa dilakukan sekarang
- Catat semua akun yang memiliki akses administrator, hosting, database, dan email pemulihan.
- Pastikan backup terakhir dapat dibuka dan benar-benar bisa dipulihkan.
- Aktifkan autentikasi dua faktor untuk akun penting.
- Hapus plugin, tema, akun, dan token integrasi yang tidak digunakan.
- Buat dokumen singkat berisi kontak hosting dan langkah menonaktifkan website saat darurat.
Sumber & bacaan lebih lanjut
- OWASP Cross Site Scripting Prevention Cheat Sheet
- OWASP SQL Injection Prevention Cheat Sheet
- WordPress Hardening Guide
- WordPress Brute Force Protection Guide
- PHP Session Security Settings
– Rio Yotto @rioyotto
