Mayoritas website UMKM di Indonesia pakai WordPress. Data W3Techs 2025 mencatat WordPress menjalankan 43% dari seluruh website. Angka itu bikin WordPress jadi target empuk. Pelaku tidak perlu keahlian tinggi. Mereka pakai bot yang memindai plugin usang, password lemah, dan folder yang bisa ditulisi.
Artikel ini memandu Anda mengamankan WordPress dari deface dan malware dengan cara yang defensif, teruji, dan tidak mengganggu operasional toko.
Kenapa WordPress UMKM sering kena deface
Deface berarti pelaku mengganti tampilan depan website Anda dengan pesan mereka. Malware lebih senyap. Malware mencuri data pengunjung, mengarahkan ke situs judi, atau memakai server Anda untuk spam.
Anda perlu paham tiga celah utama.
Plugin dan tema yang tidak update. Sucuri 2024 melapor 95% infeksi WordPress berasal dari plugin rentan. Satu plugin contact form yang tertinggal dua versi bisa membuka pintu.
Password admin yang mudah ditebak. Bot mencoba kombinasi admin, password123, nama toko, tanggal lahir. Serangan brute force ke wp-login.php masih mendominasi log server.
Hak akses file yang longgar. Folder wp-content dengan permission 777 membiarkan siapa pun menulis file. File wp-config.php yang bisa dibaca publik membocorkan kredensial database.
Tiga poin di atas bukan teori. Anda bisa cek sendiri di hosting Anda hari ini.
Langkah 0: Inventaris dulu sebelum hardening
Buka dashboard WordPress Anda. Catat daftar ini di spreadsheet sederhana.
- Versi WordPress inti. Cek di Dashboard > Update.
- Daftar plugin aktif, versi, dan tanggal update terakhir. Nonaktifkan plugin yang tidak Anda pakai.
- Tema aktif dan tema cadangan. Hapus tema yang tidak aktif kecuali satu tema default WordPress untuk recovery.
- Daftar user dengan peran Administrator, Editor, Author. Hapus akun admin dengan username admin.
- Layanan hosting, versi PHP, dan akses file manager atau FTP.
Inventaris ini jadi baseline. Anda tahu apa yang perlu dijaga. Banyak pemilik website skip tahap ini dan langsung pasang plugin keamanan. Hasilnya tumpang tindih.
Langkah 1: Kunci akses masuk
Ganti URL login dan batasi percobaan
Bot memindai /wp-admin dan /wp-login.php setiap detik. Anda kurangi kebisingan itu dengan membatasi percobaan login.
Pakai plugin limit login yang ringan seperti Limit Login Attempts Reloaded. Set batas 4 percobaan per IP, lockout 60 menit. Konfigurasi ini tidak butuh pemeliharaan.
Jangan pakai plugin yang menawarkan ganti URL login dengan rewrite rumit jika hosting Anda pakai caching agresif. Fitur ini sering bikin Anda terkunci sendiri.
Aktifkan 2FA untuk semua administrator
Password saja tidak cukup. Aktifkan two-factor authentication. Anda bisa pakai TOTP lewat aplikasi authenticator. Plugin seperti Two Factor atau WP 2FA mendukung ini.
Prosedurnya:
- Pasang plugin 2FA.
- Setiap admin scan QR code dengan Google Authenticator atau Aegis.
- Simpan recovery code di password manager, bukan di screenshot galeri HP.
- Uji login dari mode incognito.
Di toko fisik Anda tidak biarkan satu kunci untuk semua pintu. Prinsip sama berlaku di WordPress.
Hapus user admin dan pakai email unik
Buat user baru dengan peran Administrator, username acak bukan nama toko. Contoh: umkm-admin-rahmat-24. Hapus user lama admin. Pada saat hapus, pilih pindahkan semua posting ke user baru.
Pakai email yang berbeda untuk admin WordPress dan email publik toko. Email publik masuk banyak spam dan jadi target phishing.
Langkah 2: Update dengan kontrol, bukan asal klik
Update menutup celah. Update tanpa backup merusak toko.
Ikuti alur ini setiap minggu.
- Backup dulu. Lihat langkah 5.
- Update WordPress inti di staging atau jam sepi pengunjung.
- Update plugin satu per satu. Cek website setelah tiap update.
- Cek log error di hosting > Error Log.
Aktifkan auto-update minor untuk WordPress inti. Nonaktifkan auto-update major untuk plugin toko yang kritis seperti WooCommerce sampai Anda uji di staging. WooCommerce 2024 pernah merilis update yang merusak metode pembayaran di Indonesia. Penundaan 48 jam untuk baca release note menyelamatkan transaksi.
Hapus plugin nulled atau bajakan. Plugin bajakan sering sudah disisipi backdoor sejak awal. Harga plugin premium lebih murah daripada biaya bersihkan malware.
Langkah 3: Bereskan hak akses file dan wp-config
Ini bagian teknis yang paling berdampak.
Aturan permission yang aman
Masuk ke cPanel > File Manager atau pakai FTP.
- Semua folder: 755
- Semua file: 644
- File wp-config.php: 600 atau 640
- Folder wp-content/uploads: 755, file di dalamnya 644
Jangan pakai 777. Angka 777 artinya semua user di server bisa tulis file. Di shared hosting, itu berbagi risiko dengan website orang lain.
Proteksi wp-config.php dan .htaccess
Tambahkan ini di .htaccess di root jika Anda pakai Apache/LiteSpeed.
<files wp-config.php>
order allow,deny
deny from all
</files>
Pindahkan wp-config.php satu level di atas public_html jika hosting mengizinkan. WordPress otomatis cek folder atas. Langkah ini menghalangi akses langsung.
Di dalam wp-config.php, tambahkan kunci keamanan baru. Kunjungi https://api.wordpress.org/secret-key/1.1/salt/. Copy paste hasilnya mengganti bagian AUTH_KEY dan kawan-kawan. Kunci baru memaksa logout semua sesi. Pelaku yang mencuri cookie lama kehilangan akses.
Matikan edit file dari dashboard.
define('DISALLOW_FILE_EDIT', true);
Fitur edit tema dan plugin dari dashboard memudahkan pelaku yang sudah masuk untuk tanam backdoor. Nonaktifkan saja.
Nonaktifkan XML-RPC jika tidak perlu
File xmlrpc.php dipakai untuk brute force yang menghindari limit login. Jika Anda tidak pakai Jetpack atau aplikasi mobile WordPress lama, matikan.
Tambahkan di .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>
Atau pakai filter di plugin.
Langkah 4: Pasang lapisan pertahanan di depan WordPress
Web Application Firewall (WAF)
WAF menyaring trafik jahat sebelum sampai ke WordPress. Dua opsi:
Cloudflare free tier. Aktifkan proxy orange cloud. Aktifkan Bot Fight Mode. Buat rule: block URI path yang berisi /wp-admin untuk negara yang tidak relevan jika toko Anda hanya melayani Indonesia. Cloudflare juga memberi SSL gratis.
Plugin WAF lokal seperti Wordfence atau Sucuri. Wordfence punya firewall endpoint yang baca trafik sebelum WordPress load. Aktifkan mode extended protection. Wordfence butuh sumber daya. Di hosting murah, ini bisa bikin website lambat. Uji dulu.
Jangan pasang dua WAF lokal sekaligus. Pilih satu.
Batasi akses wp-admin lewat IP jika memungkinkan
Jika Anda punya IP kantor tetap, tambahkan proteksi .htaccess di wp-admin.
<Files wp-login.php>
Require ip 203.0.113.10
</Files>
Ganti IP contoh dengan IP Anda. Opsi ini tidak cocok jika tim Anda kerja remote dengan IP dinamis.
Aktifkan HTTPS dan HSTS yang benar
Cloudflare atau hosting Anda bisa aktifkan SSL. Pastikan WordPress memaksa HTTPS.
Di Settings > General, ubah Site URL jadi https://.
Tambahkan redirect 301 di .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Setelah HTTPS stabil 1 minggu, minta hosting aktifkan HSTS. HSTS memaksa browser selalu pakai HTTPS.
Langkah 5: Backup 3-2-1 yang bisa di-restore, bukan sekadar ada
Banyak UMKM sudah backup tapi tidak pernah coba restore. Backup yang tidak teruji sama dengan tidak backup.
Ikuti prinsip 3-2-1.
- 3 salinan data: file WordPress + database
- 2 media berbeda: hosting + Google Drive
- 1 salinan offsite: Drive atau Dropbox
Jadwal praktis:
- Database: harian
- File: mingguan
- Simpan 30 hari terakhir
Plugin seperti UpdraftPlus atau hosting backup otomatis bisa lakukan ini. Simpan kredensial backup di luar WordPress. Jika website kena ransomware, pelaku hapus plugin backup dari dalam.
Uji restore setiap 3 bulan. Buat subdomain staging.yourdomain.com, restore backup ke sana. Catat waktu yang dibutuhkan dan langkahnya. Saat insiden beneran, Anda tidak panik.
Langkah 6: Monitoring file dan aktivitas login
Anda butuh deteksi dini, bukan laporan setelah sebulan.
Aktifkan fitur ini di Wordfence atau plugin keamanan:
- Email alert saat user admin baru dibuat.
- Email alert saat file inti WordPress berubah.
- Email alert saat plugin baru terpasang.
- Log aktivitas user. Siapa edit produk, siapa hapus pesanan.
Simpan log di luar WordPress minimal 90 hari. Jika Anda pakai Cloudflare, cek Firewall Events tiap minggu. Pola seperti 100 request ke /wp-content/uploads dalam 1 menit dari satu IP sering menandakan brute force upload.
Tambahkan Google Search Console. Search Console memberi alert jika Google deteksi malware di website Anda. Alert ini sering lebih cepat dari laporan pelanggan.
Langkah 7: Respons saat website kena deface atau malware
Jangan panik dan jangan langsung hapus semua file. Bukti penting untuk diagnosis.
Ikuti urutan ini.
Jam pertama: isolasi
- Aktifkan maintenance mode. Plugin SeedProd atau via .htaccess.
- Ganti password hosting, WordPress, database.
- Nonaktifkan website dari Cloudflare cache dengan purge everything dan set ke Under Attack Mode jika serangan masih aktif.
Jam ke-4: scan dan bersihkan
- Scan dengan Wordfence scan atau Sucuri scanner. Catat file yang terinfeksi.
- Bandingkan file inti WordPress dengan file fresh dari wordpress.org. Ganti file wp-admin dan wp-includes yang berubah.
- Cek folder uploads. File .php di dalam uploads itu tidak normal. Hapus file php di uploads jika Anda tidak pakai plugin yang memang butuh itu.
- Cek cron job di cPanel. Backdoor sering tanam cron job yang hidupkan ulang file malware setiap 5 menit.
Hari pertama: pulihkan dan kunci ulang
- Restore dari backup bersih terakhir sebelum infeksi jika infeksi menyebar luas.
- Reset salt keys di wp-config.php.
- Paksa logout semua user: instal plugin Force Re-login atau ubah salt.
- Update semua plugin dan tema.
- Submit website ke Google Safe Browsing untuk review ulang jika Google flag website Anda: https://safebrowsing.google.com/safebrowsing/report_error/
Dokumentasi insiden
Catat tanggal, file yang terinfeksi, IP yang mencurigakan, dan langkah yang Anda ambil. Dokumentasi ini membantu jika Anda lapor ke partner hosting atau butuh klaim.
Checklist hardening 30 menit tiap bulan
Pakai checklist ini agar tidak lupa.
- Update WordPress, plugin, tema.
- Hapus plugin dan tema tidak aktif.
- Cek user admin. Hapus yang tidak perlu.
- Cek permission file.
- Cek backup bisa di-restore.
- Cek Search Console untuk security issue.
- Cek Cloudflare firewall events.
- Ganti password admin tiap 90 hari dan pastikan 2FA aktif.
- Scan malware full.
Cetak checklist dan tempel di dekat kasir. Security bukan tugas IT saja.
Kesalahan UMKM yang bikin website jebol lagi
Pasang 5 plugin keamanan sekaligus. Plugin security saling tabrakan dan bikin website lambat. Pelanggan kabur sebelum kena hack.
Pakai password sama untuk hosting, WordPress, dan email toko. Satu kebocoran merembet ke semua.
Simpan backup di folder public_html/backups. Bot scan folder backup dan download database Anda. Simpan di luar public_html atau di cloud.
Percaya 100% ke jasa bersih malware tanpa ganti credential. Malware hilang, tapi backdoor user admin masih aktif. Pelaku masuk lagi minggu depan.
Tidak pernah baca log. Log hosting cerita banyak. Login sukses jam 2 pagi dari negara yang tidak ada tim Anda adalah tanda jelas.
Studi kasus: toko kue rumahan di Batam selamat berkat backup
Anda kelola toko kue dengan 200 pesanan per bulan lewat WordPress dan WooCommerce. Suatu pagi Anda buka website, halaman depan menampilkan tulisan hacker dan lagu.
Tim Anda cek log. Pelaku masuk lewat plugin slider yang tidak update selama 4 bulan. Pelaku upload file shell bernama wp-secures.php di folder uploads. File itu eksekusi perintah untuk ubah index.php.
Karena Anda ikut checklist bulanan, langkah pemulihan hanya butuh 2 jam.
- Anda aktifkan maintenance mode lewat Cloudflare.
- Anda restore database dari backup kemarin dan file dari minggu lalu.
- Anda hapus plugin slider, ganti dengan plugin yang maintenancenya aktif.
- Anda reset semua password, aktifkan 2FA, dan ganti salt.
- Anda scan ulang dengan Wordfence, hasilnya bersih.
- Anda kirim email ke pelanggan: website sempat maintenance, tidak ada data kartu yang disimpan di server toko.
Tanpa backup teruji, kasus serupa bisa tutup toko 3-7 hari. Biaya hilang bukan hanya perbaikan, tapi kepercayaan pelanggan. Pelanggan yang melihat halaman judi di website kue Anda jarang kembali.
Pelajaran dari kasus ini: update, backup teruji, dan 2FA memberi Anda opsi. Opsi itu membedakan downtime 2 jam versus downtime 1 minggu.
Konfigurasi contoh untuk hosting LiteSpeed + cPanel
Banyak UMKM pakai hosting lokal dengan LiteSpeed. Simpan konfigurasi contoh ini di dokumentasi internal.
File .htaccess root tambahan:
# Blokir akses file sensitif
<FilesMatch "^(wp-config\.php|readme\.html|license\.txt)">
Require all denied
</FilesMatch>
# Blokir listing folder
Options -Indexes
# Proteksi file htaccess itu sendiri
<Files .htaccess>
Require all denied
</Files>
wp-config.php hardening tambahan:
define('WP_AUTO_UPDATE_CORE', 'minor');
define('DISALLOW_FILE_EDIT', true);
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
Cron untuk backup ke Google Drive via UpdraftPlus:
Atur backup database tiap jam 02.00 WIB. Atur backup file tiap Minggu jam 03.00 WIB. Retensi 30 hari. Simpan log backup di email terpisah.
Dokumentasi kecil seperti ini menghemat waktu saat Anda ganti admin atau serahkan ke freelancer.
Peta jalan 90 hari untuk UMKM yang baru mulai
Minggu 1-2: Inventaris, backup 3-2-1, 2FA, limit login, Cloudflare.
Minggu 3-4: Perbaiki permission, hapus plugin tidak pakai, ganti salt, scan awal.
Bulan 2: Uji restore backup, aktifkan monitoring, pasang Search Console, edukasi tim kasir tentang phishing email yang mengatasnamakan provider hosting.
Bulan 3: Audit vendor pihak ketiga yang punya akses website, cek apakah agency lama masih punya akun admin, dan buat SOP sederhana satu halaman tentang siapa yang hubungi siapa saat website deface.
SOP satu halaman lebih berguna daripada dokumen 20 halaman yang tidak dibaca.
Sumber dan bacaan lanjutan
- OWASP: Secure Configuration Guide for WordPress
- WordPress.org: Hardening WordPress
- Sucuri: Website Threat Research Report 2024
- CISA: Protecting Against Malicious CMS Plugins
- Cloudflare: WAF Best Practices
Catatan editorial: Panduan ini defensif. Selalu backup sebelum ubah file core. Tampilan panel hosting tiap provider beda. Pakai dokumentasi hosting Anda untuk langkah spesifik. Jika Anda ragu, mintai bantuan pengelola hosting terpercaya.
Pertanyaan yang sering diajukan
Apakah saya butuh plugin keamanan berbayar?
Tidak wajib. Versi gratis Wordfence atau kombinasi Cloudflare free plus limit login sudah cukup untuk UMKM kecil. Bayar jika Anda kelola trafik tinggi atau simpan data pelanggan sensitif.
Plugin keamanan apa yang paling ringan?
Limit Login Attempts Reloaded untuk brute force, Two Factor untuk 2FA, dan Cloudflare APO gratis untuk WAF. Trio ini ringan.
Bagaimana tahu website kena malware redirect judi?
Cek website Anda di mode incognito, pakai HP dan laptop. Cek Google dengan site:yourdomain.com. Redirect judi sering hanya aktif untuk pengunjung mobile dari Google, bukan saat Anda login sebagai admin. Pakai alat Sucuri SiteCheck gratis untuk scan cepat.
Apakah mengganti prefix table wp_ masih perlu?
Efeknya kecil dibanding 2FA dan update. Jika website masih baru, ganti prefix saat install. Jika website sudah jalan, jangan ubah manual lewat phpMyAdmin karena risiko rusak relasi tabel.
Kapan saya harus pindah dari shared hosting ke VPS?
Pindah jika trafik konsisten di atas 50 ribu kunjungan per bulan, butuh isolasi file yang lebih baik, atau butuh WAF custom. Shared hosting yang bagus dengan isolasi CageFS masih aman untuk UMKM awal.
Bagaimana cara aman memberi akses ke freelancer?
Buat akun Editor, bukan Administrator. Beri akses sementara dan catat tanggal berakhir. Hapus akun setelah pekerjaan selesai. Jangan kirim password hosting lewat WhatsApp tanpa 2FA. Pakai password manager yang bisa share aman seperti Bitwarden Send dengan batas waktu. Setelah freelancer selesai, cek file yang diubah dan log aktivitas. Praktik sederhana ini mencegah akses yang tertinggal bertahun-tahun.
Apakah SSL gratis cukup?
SSL gratis dari Let's Encrypt atau Cloudflare sudah cukup untuk enkripsi. Yang penting Anda paksa redirect ke HTTPS dan aktifkan auto-renew. Jangan biarkan sertifikat kedaluwarsa karena browser akan flag website tidak aman dan pelanggan batal checkout.

