Banner - Cara Hardening WordPress

Cara Hardening WordPress dengan .htaccess dan WP-CLI

Hardening WordPress menjadi langkah penting seiring meningkatnya berbagai ancaman keamanan, mulai dari serangan brute force, eksploitasi file, hingga akses yang tidak sah ke website. Mengandalkan plugin keamanan saja sering kali belum cukup, terutama jika Anda ingin menjaga performa server tetap ringan dan stabil.

Melalui panduan ini, Anda akan mempelajari cara melakukan hardening WordPress menggunakan .htaccess dan WP-CLI langsung dari sisi server. Dengan pendekatan ini, Anda dapat meningkatkan keamanan website tanpa perlu memasang banyak plugin tambahan, sekaligus membangun konfigurasi yang lebih efisien dan mudah dipelihara.

Apa Itu Hardening WordPress?

Hardening WordPress adalah serangkaian cara untuk meningkatkan keamanan website dengan mengurangi celah yang berpotensi dimanfaatkan oleh pihak yang tidak bertanggung jawab. Berbeda dengan proses instalasi atau pembaruan WordPress, hardening berfokus pada pengamanan konfigurasi, hak akses file, fitur bawaan, hingga lingkungan server agar risiko serangan dapat diminimalkan.

Perlu dipahami, bahwa hardening tidak membuat website menjadi kebal terhadap serangan. Hardening WordPress bertujuan untuk memperkecil peluang eksploitasi sehingga website lebih sulit ditembus dan dampak serangan dapat dikurangi. Langkah-langkah seperti membatasi akses ke file penting, menonaktifkan fitur yang tidak diperlukan, serta menjaga plugin dan tema tetap diperbarui merupakan bagian dari praktik hardening yang umum diterapkan.

Kapan Hardening WordPress Perlu Dilakukan?

Idealnya, hardening dilakukan segera setelah WordPress selesai diinstal dan sebelum website digunakan untuk kebutuhan produksi. Dengan demikian, berbagai pengaturan keamanan sudah diterapkan sejak awal sehingga risiko serangan dapat ditekan.

Selain itu, hardening juga disarankan ketika:

Pindah Hosting ke Rumahweb Gratis

  • Website baru selesai dipindahkan ke server atau hosting baru.
  • Anda baru menginstal plugin atau tema dalam jumlah banyak.
  • Website pernah mengalami serangan malware atau percobaan peretasan.
  • Ingin melakukan audit keamanan secara berkala.
  • Akan mengelola website yang menyimpan data pelanggan atau transaksi penting.

Melakukan hardening secara berkala merupakan bagian dari pemeliharaan website, bukan hanya tindakan setelah terjadi masalah.

Lakukan Backup Sebelum Memulai Hardening

Backup dapat dilakukan melalui fitur Backup di cPanel, backup manual menggunakan File Manager atau FTP, maupun dengan memanfaatkan fitur backup yang tersedia di Softaculous hosting Anda.

Tips: Simpan setidaknya satu salinan backup di komputer lokal atau layanan penyimpanan cloud. Dengan demikian, Anda dapat mengembalikan website ke kondisi semula jika terjadi kesalahan selama proses hardening.

Hardening WordPress melalui File .htaccess

File .htaccess merupakan file konfigurasi pada server Apache yang dijalankan sebelum WordPress memproses permintaan pengguna. Dengan memanfaatkan .htaccess, Anda dapat memblokir berbagai ancaman langsung dari level server.

Sebelum melakukan perubahan pada file .htaccess, selalu lakukan backup file aslinya terlebih dahulu. Pastikan Anda memasukkan kode-kode di bawah ini di luar blok #BEGIN WordPress dan #END WordPress agar tidak terhapus secara otomatis oleh sistem WordPress.

1. Mengamankan File wp-config.php

File wp-config.php berisi informasi sensitif seperti kredensial database dan kunci enkripsi WordPress. Untuk meningkatkan keamanan, batasi akses langsung ke file ini dari luar dengan menambahkan aturan berikut:

<Files "wp-config.php">
    Require all denied
</Files>

2. Mematikan Eksekusi Skrip PHP di Folder Uploads

Modus serangan yang paling umum adalah menyisipkan file berbahaya (backdoor shell) berformat .php yang disamarkan sebagai file gambar ke dalam folder media WordPress. Untuk mencegah file tersebut dieksekusi oleh server, buat file .htaccess baru di dalam direktori /wp-content/uploads/, lalu tambahkan kode berikut:

<FilesMatch "\.php$">
    Require all denied
</FilesMatch>

Konfigurasi ini menonaktifkan eksekusi file PHP pada direktori media (uploads). Dengan begitu, meskipun file PHP berhasil terunggah, server akan menolak untuk menjalankannya sehingga risiko eksploitasi dapat diminimalkan.

3. Membatasi Akses ke File xmlrpc.php

Fitur XML-RPC pada file xmlrpc.php menyediakan mekanisme komunikasi antara WordPress dan layanan eksternal. Meski demikian, endpoint ini kerap dimanfaatkan oleh penyerang untuk melakukan serangan Brute Force dan DDoS. Apabila tidak diperlukan, nonaktifkan akses ke xmlrpc.php guna mengurangi risiko keamanan dengan menambahkan aturan berikut:

<Files "xmlrpc.php">
    Require all denied
</Files>

4. Melarang Penelusuran Direktori (Directory Browsing)

Secara default, server dapat menampilkan daftar isi direktori (directory listing) apabila sebuah folder WordPress tidak memiliki file indeks seperti index.php atau index.html. Kondisi ini berisiko karena dapat mengungkap struktur file dan direktori situs kepada pihak yang tidak berwenang, sehingga memudahkan mereka mencari celah keamanan. Untuk mencegah hal tersebut, nonaktifkan directory listing dengan menambahkan perintah berikut:

Options -Indexes

5. Memblokir Akses ke File Sensitif Lainnya

Selain wp-config.php, terdapat beberapa file sistem WordPress lain yang sebaiknya tidak dapat diakses secara publik. File-file seperti log, readme, dan lisensi dapat mengungkap informasi yang tidak diperlukan oleh pengunjung, bahkan berpotensi dimanfaatkan untuk tujuan yang tidak diinginkan.

Untuk meningkatkan keamanan, batasi akses ke file-file berikut:

<FilesMatch "^(readme\.html|license\.txt|wp-config-sample\.php|\.htaccess|error_log)$">
    Require all denied
</FilesMatch>

6. Mencegah Hotlinking Gambar

Hotlinking adalah praktik ketika website lain menampilkan gambar yang tersimpan di server Anda secara langsung. Akibatnya, bandwidth hosting Anda akan tetap terpakai setiap kali gambar tersebut diakses, meskipun pengunjung tidak berasal dari website Anda. Untuk mencegah penyalahgunaan ini, tambahkan aturan berikut dan ganti namadomain.com dengan domain Anda:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?namadomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|svg)$ - [F,NC,L]

7. Membatasi Metode HTTP

Sebagian besar website hanya memerlukan metode HTTP GET, POST, dan HEAD untuk beroperasi secara normal. Metode lain, seperti DELETE, TRACE, dan PUT, umumnya tidak digunakan dan berpotensi disalahgunakan untuk tujuan yang tidak diinginkan. Untuk mengurangi risiko keamanan, batasi akses hanya ke metode HTTP yang diperlukan dengan menambahkan aturan berikut:

<LimitExcept GET POST HEAD>
    Require all denied
</LimitExcept>

Sebagian besar aturan hardening pada .htaccess bekerja dengan cara membatasi akses ke file atau direktori tertentu. Ketika aturan tersebut aktif, server umumnya akan menampilkan respons 403 Forbidden sebagai tanda bahwa akses telah berhasil diblokir.

Hardening WordPress - 403

Sebagai referensi, berikut contoh konfigurasi lengkap file .htaccess yang menggabungkan seluruh aturan keamanan di atas:

# ==========================================
# WordPress Security Hardening
# Letakkan DI LUAR blok WordPress
# ==========================================

# Nonaktifkan directory listing
Options -Indexes

# Lindungi wp-config.php
<Files "wp-config.php">
    Require all denied
</Files>

# Blokir xmlrpc.php
<Files "xmlrpc.php">
    Require all denied
</Files>

# Blokir file sensitif
<FilesMatch "^(readme\.html|license\.txt|wp-config-sample\.php|\.htaccess|error_log)$">
    Require all denied
</FilesMatch>

# Batasi metode HTTP
<LimitExcept GET POST HEAD>
    Require all denied
</LimitExcept>

# Anti hotlinking, silakan sesuaikan dengan nama domain anda
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?namadomain\.com [NC]
    RewriteRule \.(jpg|jpeg|png|gif|webp|svg)$ - [F,NC,L]
</IfModule>


# ==================================================
# JANGAN UBAH BLOK INI
# WordPress akan mengelolanya otomatis
# ==================================================

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Selain aturan yang dibahas pada artikel ini, masih banyak konfigurasi .htaccess lain yang dapat diterapkan untuk meningkatkan keamanan, performa, maupun optimasi website WordPress. Anda dapat mempelajari lebih lanjut melalui dokumentasi resmi Apache berikut: Dokumentasi .htaccess

Hardening WordPress dengan WP-CLI

Jika .htaccess berperan sebagai pagar pelindung dari ancaman eksternal, maka WP-CLI (WordPress Command Line Interface) dapat diibaratkan sebagai asisten untuk melakukan pengelolaan dan audit internal. WP-CLI adalah alat berbasis baris perintah (command-line) yang memungkinkan Anda mengelola WordPress secara langsung melalui terminal atau akses SSH.

Penggunaan WP-CLI lebih efisien karena seluruh proses dijalankan langsung di server tanpa melalui browser, sehingga lebih efisien dan minim penggunaan sumber daya.

1. Pengecekan File Core WordPress

Jika website Anda dicurigai telah disusupi malware yang bersembunyi di dalam folder sistem, seperti wp-includes atau wp-admin, Anda dapat melakukan pemeriksaan keutuhan file inti WordPress secara instan dengan perintah berikut:

wp core verify-checksums

WP-CLI akan membandingkan setiap file inti WordPress dengan checksum resmi yang disediakan oleh WordPress.org. Jika ditemukan file yang telah dimodifikasi, ditambahkan, atau tidak sesuai dengan versi resminya, sistem akan menampilkan detail file yang terdeteksi.

Berikut contoh hasil pengecekan jika tidak ditemukan masalah:

Pengecekan File Core WordPress

Pesan tersebut menandakan bahwa seluruh file inti WordPress sesuai dengan versi resminya dan tidak ditemukan perubahan yang mencurigakan. Sebaliknya, jika terdapat file yang dimodifikasi, rusak, atau tidak sesuai dengan checksum resmi, WP-CLI akan menampilkan pesan seperti berikut:

Pengecekan File Core WordPress kedua

Hasil tersebut mengindikasikan bahwa terdapat file inti WordPress yang telah berubah. Perubahan ini bisa disebabkan oleh modifikasi manual, kerusakan file, atau bahkan indikasi terkena malware. Jika Anda tidak melakukan perubahan pada file tersebut, disarankan untuk segera melakukan investigasi lebih lanjut dan mengganti file inti WordPress dengan versi resmi yang sesuai.

2. Memperbarui Core, Plugin, dan Tema WordPress

Plugin atau tema yang tidak diperbarui merupakan salah satu celah keamanan yang paling sering dimanfaatkan oleh peretas. Untuk menjaga keamanan website, Anda perlu memperbarui WordPress core, plugin, dan tema secara rutin. Dengan memanfaatkan WP-CLI, proses pembaruan tersebut dapat dilakukan sekaligus menggunakan satu baris perintah berikut:

wp core update && wp plugin update --all && wp theme update --all
Memperbarui Core, Plugin, dan Tema WordPress

Pesan tersebut menandakan bahwa WordPress core, plugin, dan tema telah menggunakan versi terbaru sehingga tidak diperlukan pembaruan lebih lanjut. Jika terdapat WordPress core, plugin, atau tema yang belum diperbarui, WP-CLI akan mengunduh dan memasang pembaruan secara otomatis.

3. Memperbaiki Hak Akses File (File Permissions)

Izin akses file (file permissions) yang terlalu longgar, seperti 777, dapat menimbulkan risiko keamanan karena memungkinkan siapa pun atau proses apa pun untuk membaca, menulis, dan menjalankan file tersebut. Sebagai praktik terbaik, WordPress merekomendasikan izin 755 untuk folder dan 644 untuk file.

Gunakan perintah berikut melalui terminal SSH untuk menerapkan izin akses secara massal:

# Mengubah izin semua folder menjadi 755
find . -type d -exec chmod 755 {} \;

# Mengubah izin semua file menjadi 644
find . -type f -exec chmod 644 {} \;

Khusus untuk file wp-config.php, gunakan izin yang lebih ketat karena file ini menyimpan informasi sensitif, seperti kredensial database dan kunci enkripsi:

chmod 600 wp-config.php

Dengan pengaturan ini, hanya pemilik file yang dapat mengubah konfigurasi sensitif, sementara akses bagi pengguna lain dibatasi sesuai prinsip least privilege (hak akses minimum).

4. Mengubah Password Admin Tanpa Masuk Dashboard

Jika akun administrator Anda terindikasi diretas atau Anda terkunci dari dashboard WordPress, Anda dapat mereset password secara paksa melalui WP-CLI tanpa perlu mengakses phpMyAdmin. Gunakan perintah berikut untuk mengganti password akun:

wp user update username_anda --user_pass="PasswordBaruYangRumitDanAman123!"

Pada beberapa layanan hosting, Anda mungkin menemui pesan error seperti berikut:
Fatal error: Uncaught Error: Call to undefined function PHPMailer\PHPMailer\mail()

Error tersebut biasanya muncul karena WordPress mencoba mengirim email notifikasi perubahan password kepada pengguna. Namun, pada beberapa penyedia hosting, fungsi mail() dinonaktifkan demi alasan keamanan. Jika Anda ingin tetap mengirimkan notifikasi email, pastikan SMTP telah dikonfigurasi pada WordPress.

Sebagai alternatif, Anda dapat menambahkan parameter --skip-email agar WP-CLI mengubah password tanpa mengirim notifikasi email:

wp user update username_anda --user_pass="PasswordBaru123!" --skip-email
Mengubah Password Admin Tanpa Masuk Dashboard

Untuk menampilkan daftar seluruh pengguna yang terdaftar di situs, jalankan perintah berikut:

wp user list
cek list user

Periksa daftar tersebut dan pastikan tidak ada akun administrator yang tidak Anda kenali. Jika menemukan akun mencurigakan, segera hapus menggunakan perintah berikut:

wp user delete ID_USER_MENCURIGAKAN
hapus user

Lakukan pemeriksaan akun secara rutin untuk memastikan hanya pengguna yang sah yang memiliki akses ke website Anda.

5. Mematikan Fitur Pingback Global

Fitur pingback pada WordPress sering disalahgunakan sebagai media pantulan (reflection attack) dalam serangan DDoS. Jika fitur ini tidak digunakan, sebaiknya nonaktifkan secara permanen untuk mengurangi risiko penyalahgunaan. Gunakan perintah berikut untuk menonaktifkan pingback dan ping secara default di seluruh situs:

wp option update default_pingback_status closed
wp option update default_ping_status closed
Mematikan Fitur Pingback Global

6. Menghapus Plugin dan Tema yang Tidak Aktif

Plugin dan tema yang tidak aktif tetap tersimpan di server dan dapat menjadi risiko keamanan apabila memiliki celah yang belum ditambal. Oleh karena itu, lakukan pembersihan secara berkala dengan menghapus komponen yang sudah tidak digunakan.

Untuk mengidentifikasi plugin yang tidak lagi digunakan, Anda dapat menampilkan daftar plugin berstatus tidak aktif menggunakan perintah berikut:

wp plugin list --status=inactive
Menghapus Plugin dan Tema yang Tidak Aktif

Jika terdapat plugin yang sudah tidak diperlukan, hapus plugin tersebut untuk mengurangi risiko keamanan dan menjaga instalasi WordPress tetap bersih dengan perintah berikut :

wp plugin delete nama-plugin
hapus plugin

Anda juga dapat mengidentifikasi tema di wordpress yang tidak lagi digunakan menggunakan perintah berikut:

wp theme list --status=inactive
wp theme list

Jika terdapat tema yang sudah tidak diperlukan, Anda dapat menghapusnya menggunakan perintah berikut:

wp theme delete nama-tema
hapus theme

Sebelum melakukan penghapusan, pastikan tema dan plugin tersebut bukan plugin/tema aktif yang sedang digunakan oleh website. Dengan menghapus plugin dan tema yang tidak digunakan, Anda dapat menjaga instalasi WordPress tetap aman dan terkelola dengan baik.

7. Mengaktifkan Mode Pemeliharaan Saat Update

Sebelum melakukan pembaruan pada wordpress, Anda dapat mengaktifkan maintenance mode agar pengunjung tidak mengalami gangguan atau melihat tampilan yang tidak semestinya selama proses pembaruan berlangsung. Gunakan perintah berikut untuk mengaktifkan dan menonaktifkan maintenance mode melalui WP-CLI:

# Mengaktifkan maintenance mode
wp maintenance-mode activate


# Menonaktifkan maintenance mode
wp maintenance-mode deactivate
Mengaktifkan Mode Pemeliharaan Saat Update

Setelah seluruh proses pembaruan selesai, pastikan maintenance mode dinonaktifkan agar website dapat kembali diakses oleh pengunjung secara normal.

WP-CLI menyediakan banyak perintah lain yang dapat dimanfaatkan untuk mengelola dan meningkatkan keamanan WordPress. Pada artikel ini, kita hanya membahas sebagian kecil dari kemampuannya. Anda dapat mempelajari lebih lanjut berbagai perintah dan penggunaannya melalui dokumentasi resmi berikut: Dokumentasi Resmi WP-CLI Commands

Cara Menguji Konfigurasi Setelah Hardening

Setelah seluruh konfigurasi diterapkan, lakukan pengujian untuk memastikan website tetap berjalan normal. Jangan hanya memastikan website dapat dibuka, tetapi periksa juga fungsi-fungsi penting yang mungkin terdampak.

Beberapa hal yang sebaiknya diuji antara lain:

  • Halaman website dapat diakses tanpa muncul error.
  • Login ke dashboard WordPress tetap berfungsi.
  • Upload gambar atau file masih dapat dilakukan.
  • Plugin dan tema berjalan normal.
  • Endpoint xmlrpc.php sudah dibatasi atau dinonaktifkan sesuai kebutuhan.
  • Tidak muncul pesan 403 Forbidden atau 500 Internal Server Error pada halaman yang seharusnya dapat diakses.

Pengujian sederhana seperti ini dapat membantu menemukan kesalahan konfigurasi sejak awal sebelum berdampak kepada pengunjung website.

Checklist Hardening WordPress

Sebelum artikel ini selesai, gunakan daftar berikut sebagai pengingat untuk memastikan proses hardening telah dilakukan dengan benar.

  • Membuat backup file dan database.
  • Memperbarui core WordPress ke versi terbaru.
  • Memperbarui plugin dan tema yang digunakan.
  • Menghapus plugin dan tema yang sudah tidak diperlukan.
  • Mengamankan file wp-config.php.
  • Menonaktifkan eksekusi PHP pada folder uploads.
  • Membatasi akses ke xmlrpc.php jika tidak digunakan.
  • Menonaktifkan directory browsing.
  • Mengatur hak akses (permissions) file dan folder sesuai rekomendasi.
  • Menguji seluruh fungsi website setelah proses hardening selesai.

Apabila seluruh checklist di atas sudah terpenuhi, maka website WordPress Anda telah memiliki fondasi keamanan yang jauh lebih baik dibandingkan konfigurasi bawaan.

FAQ

Berikut adalah beberapa pertanyaan popular tentang hardening WordPress.

Apakah hardening WordPress bisa dilakukan tanpa plugin keamanan?

Ya. Banyak langkah hardening dapat dilakukan langsung melalui file .htaccess, konfigurasi server, dan WP-CLI tanpa memasang plugin keamanan tambahan.


Apakah semua server mendukung WP-CLI?

Tidak selalu. WP-CLI umumnya tersedia pada VPS, dedicated server, atau layanan hosting yang memberikan akses SSH. Jika Anda menggunakan shared hosting, pastikan terlebih dahulu apakah penyedia hosting telah mengaktifkan WP-CLI pada akun Anda.


Apakah perubahan pada file .htaccess bisa menyebabkan website error?

Bisa. Kesalahan penulisan sintaks atau aturan yang tidak sesuai dapat menyebabkan website menampilkan 500 Internal Server Error atau beberapa fitur tidak berfungsi sebagaimana mestinya. Oleh karena itu, selalu buat backup file .htaccess sebelum melakukan perubahan dan uji kembali website setelah konfigurasi selesai.


Seberapa sering hardening WordPress perlu dilakukan?

Hardening bukanlah proses yang dilakukan satu kali saja. Sebaiknya lakukan peninjauan ulang setiap kali terdapat perubahan besar pada website, seperti setelah migrasi hosting, pembaruan WordPress, pemasangan plugin baru, atau sebagai bagian dari audit keamanan berkala.


Kesimpulan

Hardening WordPress adalah langkah penting untuk memperkuat keamanan website tanpa harus bergantung pada banyak plugin tambahan. Dengan memanfaatkan .htaccess untuk membatasi akses serta WP-CLI untuk melakukan audit, pembaruan, dan pemeliharaan rutin, Anda dapat membangun sistem keamanan yang lebih efisien sekaligus menjaga performa server tetap optimal.

Perlu diingat bahwa hardening bukanlah proses yang dilakukan satu kali, melainkan bagian dari pemeliharaan website secara berkelanjutan. Jika diterapkan secara konsisten dan disertai backup rutin, pembaruan WordPress, serta evaluasi konfigurasi keamanan, website Anda akan lebih siap menghadapi berbagai ancaman sekaligus tetap stabil untuk penggunaan jangka panjang.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 0 / 5. Vote count: 0

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

Rafif Aditya Nugroho

Nama saya Rafif Aditya Nugroho. Di sela-sela membaca komik, saya suka ngulik WordPress—mulai dari plugin, tema, sampai cara bikin website makin keren. Semoga catatan kecil saya ini bisa jadi bacaan ringan sekaligus bermanfaat buat kamu.