Lewati ke isi

Keamanan/Cyber Security

Cara Membersihkan Malware WordPress Tanpa Kehilangan Data

Langkah membersihkan WordPress yang terinfeksi malware tanpa menghapus postingan, pesanan, dan media, dari salinan bukti sampai mengganti semua akses.

Terbit 6 menit baca

Jawaban singkat

Kuncinya adalah memisahkan data dari kode. Simpan dulu salinan situs apa adanya, ganti inti WordPress, plugin, dan tema dengan salinan bersih dari sumber resmi, periksa uploads dan database secara terarah, lalu ganti semua password dan kunci keamanan.

Daftar isi
  1. Langkah 1: Catat gejala dan amankan salinan apa adanya
  2. Langkah 2: Kunci akses dulu
  3. Langkah 3: Ganti inti WordPress dengan salinan bersih
  4. Langkah 4: Pasang ulang plugin dan tema dari sumber resmi
  5. Langkah 5: Periksa wp-content/uploads dan file konfigurasi
  6. Langkah 6: Bersihkan database secara terarah
  7. Langkah 7: Pindai, perbarui, lalu ganti password sekali lagi
  8. Bagian mana yang disimpan dan mana yang diganti?
  9. Pertanyaan yang sering diajukan

Website WordPress kamu tiba-tiba mengalihkan pengunjung ke situs judi, muncul pengguna admin yang tidak kamu kenal, atau hosting mengirim email bahwa akunmu dipakai menyebar spam? Jangan langsung menghapus semuanya dan memasang ulang dari nol. Postingan, halaman, pesanan WooCommerce, dan gambar yang sudah kamu kumpulkan bertahun-tahun hampir selalu bisa diselamatkan.

Prinsipnya sederhana: data (isi database dan file media) disimpan, sedangkan kode (inti WordPress, plugin, tema) diganti dengan salinan bersih. Malware hampir selalu bersembunyi di kode atau menyisipkan file PHP di tempat yang seharusnya hanya berisi gambar. Panduan berikut mengikuti alur itu langkah demi langkah.

Langkah 1: Catat gejala dan amankan salinan apa adanya

Sebelum mengubah apa pun, catat apa yang kamu lihat: kapan mulai terjadi, halaman mana yang terdampak, dan perubahan apa yang terakhir kamu lakukan (plugin baru, update tema, akun baru). Dokumentasi resmi WordPress menyebut catatan ini sebagai dasar laporan insiden, dan akan sangat membantu bila nanti kamu melibatkan teknisi.

Lalu buat salinan lengkap situs dalam keadaan terinfeksi: seluruh folder website dan ekspor database. Kedengarannya aneh, tapi salinan ini adalah jaring pengaman. Kalau proses pembersihan merusak sesuatu, kamu masih punya data asli untuk dirujuk. Simpan di luar server, dan jangan pernah memulihkannya utuh ke server produksi.

Kalau kamu punya backup lama yang dibuat sebelum infeksi, catat tanggalnya. Backup itu nanti berguna untuk membandingkan file, tapi jangan langsung dipulihkan begitu saja, karena data baru sejak tanggal itu (pesanan, komentar, postingan) akan hilang.

Langkah 2: Kunci akses dulu

Penyerang yang masih punya akses bisa memasang ulang malware saat kamu sedang membersihkan. Lakukan ini secepatnya:

  1. Ganti password akun hosting (cPanel atau panel lain), FTP/SFTP, dan user database.
  2. Buka daftar Pengguna di wp-admin, hapus akun admin yang tidak kamu kenal, dan reset password semua admin yang sah.
  3. Ganti kunci dan salt di wp-config.php dengan nilai baru dari generator resmi https://api.wordpress.org/secret-key/1.1/salt/. Langkah ini memaksa semua sesi login yang masih aktif, termasuk milik penyerang, keluar.
  4. Bila memungkinkan, pasang halaman maintenance sementara supaya pengunjung tidak terkena pengalihan berbahaya.

Jangan lupa memindai laptop yang biasa dipakai login ke wp-admin atau FTP. Dokumentasi WordPress mengingatkan bahwa banyak kasus berawal dari komputer pemilik situs yang terinfeksi trojan pencuri password. Penjelasan jenis malware ini ada di artikel infostealer pencuri password browser.

Langkah 3: Ganti inti WordPress dengan salinan bersih

Folder wp-admin dan wp-includes tidak berisi data milikmu, jadi aman diganti seluruhnya. Pastikan versinya sama dengan versi yang sedang terpasang, supaya struktur database tetap cocok.

Kalau server punya WP-CLI, cek dulu file inti mana yang berubah:

wp core verify-checksums

Perintah ini membandingkan file inti dengan checksum resmi dari WordPress.org dan menampilkan file yang tidak cocok atau yang seharusnya tidak ada. Catat versi yang terpasang dengan wp core version, hapus folder wp-admin dan wp-includes, lalu unduh ulang inti tanpa menyentuh wp-content:

wp core download --version=VERSI --skip-content --force

Ganti VERSI dengan angka dari wp core version tadi. Tanpa WP-CLI, unduh paket versi yang sama dari wordpress.org, lalu unggah folder wp-admin dan wp-includes lewat SFTP setelah folder lama dihapus. Menghapus dulu itu penting: menimpa saja tidak membuang file asing yang ditambahkan penyerang.

Langkah 4: Pasang ulang plugin dan tema dari sumber resmi

Plugin dan tema adalah tempat persembunyian favorit. Untuk plugin dari direktori WordPress.org, WP-CLI bisa membantu memeriksa:

wp plugin verify-checksums --all

Cara paling aman tetap memasang ulang: hapus folder plugin lama, unduh versi terbaru dari sumber resmi atau akun pembelian (untuk plugin premium), lalu aktifkan kembali. Pengaturan plugin umumnya tersimpan di database, jadi biasanya tidak hilang. Untuk tema, unduh ulang dari pembuatnya. Kalau kamu memakai child theme dengan kode buatan sendiri, periksa file seperti functions.php, header.php, dan footer.php baris demi baris.

Plugin yang sudah lama tidak diperbarui pembuatnya, atau versi "nulled" (bajakan), sebaiknya dibuang dan dicarikan pengganti. Versi bajakan sering sudah berisi backdoor sejak awal.

Langkah 5: Periksa wp-content/uploads dan file konfigurasi

Folder uploads berisi media milikmu, jadi tidak bisa diganti begitu saja. Kabar baiknya, folder ini seharusnya tidak berisi file PHP sama sekali. Cari dari terminal:

find wp-content/uploads -type f -name "*.php"

Hampir semua hasilnya patut dicurigai. Periksa juga .htaccess di folder utama dan subfolder, karena file ini sering diubah untuk mengalihkan pengunjung. Bandingkan wp-config.php dengan isi yang kamu harapkan: tidak boleh ada baris include atau kode acak di bagian atas. Cara menelusuri file mencurigakan lebih rinci dibahas di backdoor PHP di hosting.

Langkah 6: Bersihkan database secara terarah

Database menyimpan seluruh isi situs, jadi jangan dihapus. Cukup periksa bagian yang biasa disusupi:

  • Tabel wp_users: akun admin asing yang tadi terlewat.
  • Tabel wp_options: nilai siteurl dan home yang diubah, atau opsi berisi kode JavaScript panjang.
  • Tabel wp_posts: tag <script> atau iframe asing yang disisipkan ke isi postingan.

Pakai fitur pencarian di phpMyAdmin untuk kata seperti <script, eval(, atau base64_decode. Hapus hanya potongan yang jelas asing, bukan seluruh baris postingan.

Langkah 7: Pindai, perbarui, lalu ganti password sekali lagi

Pindai situs dengan plugin pemindai dan pemindai luar, lalu perbarui inti, plugin, dan tema ke versi terbaru. Setelah situs dipastikan bersih, ganti semua password sekali lagi. Password yang diganti saat situs masih terinfeksi bisa saja ikut tercuri.

Kalau Google sempat memberi peringatan merah di browser, ikuti proses peninjauan di website diblokir Google Safe Browsing.

Bagian mana yang disimpan dan mana yang diganti?

BagianIsiTindakan
wp-admin, wp-includesKode inti WordPressHapus, ganti salinan resmi versi sama
wp-content/pluginsKode pluginPasang ulang dari sumber resmi
wp-content/themesKode temaUnduh ulang, periksa child theme manual
wp-content/uploadsMedia milikmuSimpan, buang file PHP di dalamnya
wp-config.php, .htaccessKonfigurasiPeriksa baris demi baris, ganti salt
DatabasePostingan, pesanan, penggunaSimpan, bersihkan bagian yang disusupi

Pertanyaan yang sering diajukan

Apakah cukup memulihkan backup lama saja?

Bisa, asal backup itu dibuat sebelum infeksi dan kamu rela kehilangan data sejak tanggal itu. Celah yang dipakai penyerang tetap harus ditutup, kalau tidak situs akan terinfeksi lagi.

Apakah plugin keamanan bisa membersihkan semuanya otomatis?

Plugin pemindai membantu menemukan file mencurigakan, tapi tidak menjamin semua backdoor tertangkap. Mengganti kode dengan salinan bersih tetap lebih bisa diandalkan.

Kenapa malware muncul lagi setelah dibersihkan?

Biasanya karena masih ada backdoor yang terlewat, password belum diganti, atau celah plugin yang dipakai masuk belum diperbarui.

Apakah pengaturan plugin hilang kalau plugin dipasang ulang?

Umumnya tidak, karena pengaturan disimpan di database. Hapus folder plugin lewat SFTP, bukan lewat tombol hapus di wp-admin, supaya data pengaturannya tidak ikut terhapus.

Berapa lama proses pembersihan ini?

Tergantung ukuran situs dan seberapa dalam infeksinya. Situs kecil bisa selesai dalam beberapa jam, sedangkan toko online dengan banyak plugin butuh waktu lebih lama untuk diperiksa.

Checklist singkat sebelum situs dibuka lagi:

  • Salinan situs terinfeksi tersimpan di luar server.
  • Semua password dan salt wp-config.php sudah diganti dua kali.
  • Inti, plugin, dan tema berasal dari salinan resmi.
  • Tidak ada file PHP di folder uploads.
  • Pemindaian ulang bersih dan semua komponen sudah versi terbaru.
  • Backup otomatis terjadwal ke lokasi terpisah dari server.

Sumber & referensi

Baca juga