Bot nggak perlu tahu password-mu untuk mulai bikin masalah. Kadang mereka cukup memanggil /wp-json/, membaca daftar user, lalu menghajar xmlrpc.php ribuan kali sampai server ngos-ngosan.

Masalahnya, REST API dan XML-RPC bukan fitur jahat. Keduanya fitur resmi WordPress. Jadi, kalau kamu asal blokir, mobile app, Jetpack, WooCommerce, block editor, atau integrasi eksternal bisa ikut patah.

Jawaban Singkat / Key Takeaways

REST API + XML-RPC exposure controls membatasi endpoint publik WordPress agar bot nggak bebas melakukan brute force, user enumeration, dan abuse fitur yang tidak dipakai. Strategi terbaik bukan mematikan semuanya, melainkan membuka hanya endpoint yang benar-benar dibutuhkan, lalu memberi rate limit, auth, dan monitoring.

Kenapa REST API dan XML-RPC Sering Jadi Sasaran?

REST API memberi aplikasi cara modern untuk membaca atau mengirim data ke WordPress. Sementara itu, XML-RPC adalah jalur lama untuk remote publishing, pingback, dan integrasi aplikasi.

Karena keduanya publik secara default, bot bisa menggunakannya untuk:

  • User enumeration, mencari username valid lewat endpoint publik.
  • Brute force login, terutama lewat xmlrpc.php.
  • Content scraping, menarik data post, author, atau metadata.
  • DDoS amplification, khususnya via pingback XML-RPC.
  • Endpoint probing, mencari plugin dengan route REST API rentan.
Dashboard keamanan untuk hardening API WordPress
Audit endpoint dulu, baru putuskan mana yang dibuka, dibatasi, atau ditutup.

Jangan Blokir Total Sebelum Tahu Dampaknya

Banyak tutorial menyarankan, “matikan REST API dan XML-RPC saja.” Kedengarannya aman, namun sering bikin masalah baru.

Block editor Gutenberg memakai REST API. Beberapa form, cache, SEO plugin, WooCommerce, mobile app, dan layanan backup juga bisa bergantung pada route tertentu. Jadi, kontrol exposure harus berbasis kebutuhan, bukan panik.

Framework 3 Zona: Public, Protected, Private

Pakai pendekatan tiga zona agar keputusanmu jelas.

1. Public, boleh terbuka

Endpoint ini aman dibuka karena memang perlu diakses pengunjung atau mesin pencari.

  • Post publik.
  • Page publik.
  • Data oEmbed yang diperlukan.
  • Endpoint plugin yang memang untuk frontend.

2. Protected, boleh terbuka tapi harus dibatasi

Endpoint ini berguna, namun rawan abuse. Karena itu, tambahkan rate limit, CAPTCHA di alur login, WAF rule, atau token auth.

  • /wp-json/wp/v2/users
  • Endpoint form.
  • Endpoint WooCommerce.
  • Endpoint membership atau LMS.

3. Private, tutup kecuali dari IP terpercaya

Endpoint ini jarang perlu publik. Kalau situsmu nggak memakai remote publishing, XML-RPC biasanya bisa ditutup atau dibatasi ketat.

  • /xmlrpc.php
  • Route admin internal.
  • Endpoint custom plugin untuk sinkronisasi.
  • Endpoint debug atau staging.

Cara Mengontrol REST API WordPress

Mulai dari audit sederhana. Buka https://domainmu.com/wp-json/, lalu lihat namespace yang muncul. Kalau ada route dari plugin lama yang nggak dipakai, itu kandidat pertama untuk ditinjau.

Batasi REST API untuk User Enumeration

Endpoint user sering dipakai bot untuk mencari username valid. Setelah username ditemukan, brute force jadi lebih murah.

Kamu bisa membatasi akses user endpoint untuk user yang sudah login:

add_filter('rest_endpoints', function ($endpoints) {
    if (!is_user_logged_in()) {
        unset($endpoints['/wp/v2/users']);
        unset($endpoints['/wp/v2/users/(?P<id>[\\d]+)']);
    }
    return $endpoints;
});

Tambahkan kode ini lewat plugin kecil khusus site, bukan langsung di theme, supaya tetap aktif saat theme diganti.

Tambahkan Rate Limit di Layer Server

Rate limit lebih efektif kalau dilakukan sebelum request masuk PHP. Dengan begitu, server nggak membuang CPU untuk bot murahan.

Untuk Nginx, konsepnya seperti ini:

location ~* ^/wp-json/ {
    limit_req zone=api burst=20 nodelay;
    try_files $uri $uri/ /index.php?$args;
}

Untuk Cloudflare, buat rule berbasis path /wp-json/ dan naikkan sensitivitas untuk negara, ASN, atau IP yang sering menyerang.

Cara Mengamankan XML-RPC Tanpa Menebak-nebak

Pertama, cek apakah situsmu benar-benar butuh XML-RPC. Kalau kamu nggak memakai Jetpack, mobile app WordPress, remote publishing, atau pingback, besar kemungkinan bisa diblokir.

Blokir XML-RPC via Nginx

location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
}

Blokir XML-RPC via Apache

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

Kalau Masih Butuh Jetpack atau App

Jangan blokir total. Batasi berdasarkan IP, WAF challenge, atau rate limit. Selain itu, matikan pingback kalau tidak dipakai karena fitur ini sering menjadi sumber abuse.

Referensi resmi bisa kamu cek di dokumentasi WordPress REST API Handbook dan halaman XML-RPC Support.

Advanced Tip: Ukur “Endpoint Value”, Bukan Sekadar Risiko

Keamanan yang bagus bukan berarti semua pintu ditutup. Keamanan yang matang berarti setiap pintu punya alasan bisnis, kontrol, dan log.

Beri skor tiap endpoint dengan rumus sederhana:

  • Business value, apakah endpoint ini menghasilkan fungsi penting?
  • Abuse probability, seberapa sering endpoint ini diserang bot?
  • Blast radius, kalau bocor, seberapa parah dampaknya?
  • Control depth, apakah sudah ada auth, rate limit, dan alert?

Endpoint dengan nilai bisnis rendah dan risiko tinggi harus ditutup dulu. Contoh paling umum: XML-RPC aktif di blog biasa yang nggak memakai remote publishing.

Checklist Praktis Hardening Endpoint

  • Audit /wp-json/ dan catat namespace plugin.
  • Nonaktifkan atau batasi /wp/v2/users untuk publik.
  • Blokir xmlrpc.php kalau tidak dipakai.
  • Pasang rate limit untuk /wp-login.php, /xmlrpc.php, dan /wp-json/.
  • Aktifkan 2FA untuk semua akun admin.
  • Gunakan WAF seperti Cloudflare, Sucuri, atau rule server sendiri.
  • Monitor lonjakan 401, 403, dan 429 di log.
  • Uji ulang Gutenberg, WooCommerce, form, dan integrasi setelah perubahan.

Kalau kamu juga mengamankan login, baca panduan terkait: Sudah Ganti URL Login WordPress? Masih Bolong Kalau 7 Lapis Ini Kamu Abaikan. Untuk respons insiden, simpan juga artikel WordPress Kena Hack? 8 Langkah Darurat Pemulihan Total.

FAQ

Apakah REST API WordPress harus dimatikan?

Tidak selalu. REST API dipakai Gutenberg dan banyak plugin. Batasi endpoint sensitif seperti user endpoint, lalu tambahkan rate limit dan auth untuk route yang berisiko.

Apakah XML-RPC aman?

XML-RPC aman kalau dipakai dengan kontrol ketat. Namun, kalau situsmu nggak butuh remote publishing, Jetpack, atau mobile app, memblokir xmlrpc.php biasanya pilihan lebih aman.

Apakah REST API bisa dipakai untuk brute force?

Secara umum brute force login lebih sering lewat wp-login.php dan xmlrpc.php. Namun REST API bisa membantu enumeration, probing plugin, dan abuse endpoint custom.

Plugin keamanan cukup untuk mengatasi ini?

Plugin membantu, tapi kontrol terbaik biasanya gabungan: server rule, WAF, rate limit, konfigurasi WordPress, dan monitoring log.

Kesimpulan: Buka Secukupnya, Pantau Sisanya

REST API + XML-RPC exposure controls bukan soal mematikan fitur WordPress secara membabi buta. Tujuannya adalah mengurangi permukaan serangan tanpa merusak fungsi situs.

Mulai dari endpoint yang paling sering disalahgunakan, yaitu user enumeration dan XML-RPC. Setelah itu, tambahkan rate limit, WAF rule, 2FA, dan monitoring. Dengan begitu, bot kehilangan jalur murah, sementara pengguna asli tetap nyaman.


About the Author

Dzul Qurnain

Suka nonton Anime, ngoding dan bagi-bagi tips kalau tahu.. Oh iya, suka baca ( tapi yang menarik menurutku aja)... Praktisi WordPress, web development, SEO, dan server administration yang membagikan tutorial teknis dan catatan implementasi nyata.

View All Articles