REST API WordPress: Alasan Hanya Memblokir yang Belum Login, Bukan Mematikannya Sepenuhnya

Pemberitahuan afiliasi Ver 3.1
Pemberitahuan afiliasi Ver 3.2 (khusus seluler)

REST API WordPress menampilkan nama pengguna situs lewat alamat wp-json bahkan kepada pengunjung yang belum login. Mematikannya sepenuhnya kadang membuat penyimpanan di editor blok gagal, jadi kami merangkum cara memblokir hanya permintaan saat belum login dan memastikannya dengan respons 401.

1️⃣ Apa Itu REST API WordPress: Alamat wp-json dan Fungsinya

REST API WordPress adalah fitur bawaan WordPress yang bertukar data situs seperti artikel, halaman, dan pengguna dalam format JSON, dan merespons di bawah /wp-json/ setelah alamat situs.

Di bawah /wp-json/, alamat dibagi per jenis data seperti [wp/v2/posts]·[wp/v2/pages]·[wp/v2/users], dan setiap alamat ini disebut endpoint. Editor blok juga mengirim permintaan ke alamat ini saat menyimpan artikel.

https://example.com/wp-json/
https://example.com/wp-json/wp/v2/posts
https://example.com/wp-json/wp/v2/pages
https://example.com/wp-json/wp/v2/users

2️⃣ Nama Pengguna yang Terlihat Lewat wp-json

  • ↪️ Alasan memblokir: users 401 · juga terlihat di halaman penulis

Endpoint [wp/v2/users] menampilkan nama tampilan dan nilai slug untuk setiap pengguna yang menerbitkan artikel, dan secara bawaan slug berisi ID login apa adanya. Akun admin di situs uji https://testpilotweb.com/ juga memiliki slug yang sama dengan ID login-nya.

Jika ID login terlihat, penyerang cukup menebak kata sandinya untuk masuk, dan layar login WordPress di situs uji mencatat 2,570 percobaan brute force dalam sehari pada 7 Oktober 2026.

Meski alamat ini diblokir, ID yang sama tetap tersisa di alamat halaman penulis (/author/ID/).

3️⃣ Yang Rusak Jika Dimatikan Sepenuhnya

  • ↪️ Penyimpanan editor blok · alat MCP 0

Jika WP REST API dimatikan seluruhnya, yang pertama gagal adalah penyimpanan artikel di editor blok; karena itu Perfmatters, salah satu plugin optimasi WordPress, membagi cakupannya menjadi dua tingkat: [Disable for Non-Admins] dan [Disable When Logged Out]. Di situs yang punya akun penulis atau kontributor, [Disable for Non-Admins] juga memblokir penyimpanan artikel akun tersebut.

Bahkan di situs yang hanya memblokir saat belum login, setelah konektor MCP disambungkan di claude.ai, alatnya tampil 0 setelah autentikasi selesai. Log server mencatat semua permintaan MCP sebagai 401, dan penyebabnya adalah Perfmatters memblokir permintaan sebelum MCP memeriksa token.

Nilai [Disable REST API]Alamat users bagi pengunjung yang belum loginPenyimpanan artikel oleh akun non-adminCocok untuk
Default (Enabled)Nama pengguna terlihatTersimpan—
Disable for Non-Admins401Gagal disimpanSitus tanpa akun penulis·kontributor
Disable When Logged Out401TersimpanSitus dengan akun penulis; tambahkan jalur pengecualian untuk koneksi token seperti MCP

4️⃣ Pengaturan untuk Memblokir Hanya yang Belum Login (Perfmatters)

  • ↪️ Lokasi pengaturan · cek respons 401

Di layar admin WordPress, buka [Pengaturan] → [Perfmatters] → [General], ubah [Disable REST API] pada bagian [Core] menjadi [Disable When Logged Out], lalu klik [Simpan Perubahan].

WordPress Settings → Perfmatters → General (REST API WordPress)
Perfmatters Disable REST API: Disable When Logged Out

Bahasa yang didukung Perfmatters: Inggris (bawaan), Korea, Jerman, Prancis, Italia, Belanda, Portugis (Brasil), Rusia, Ukraina, Turki, Bulgaria, Hungaria, Indonesia, Persia, Tionghoa (Sederhana)

Perfmatters settings simulator: General → Core
Simulator pengaturan Perfmatters · Ulasan·panduan Perfmatters

Jika /wp-json/wp/v2/users dibuka di jendela penyamaran tanpa login, respons 401 kembali dengan pesan [Sorry, you do not have permission to make REST API requests.], sedangkan editor blok dalam keadaan login tetap menyimpan artikel seperti biasa.

🔌 Permintaan sama, dua respons GET /wp-json/wp/v2/users
Situs yang tidak diblokir
200
Pengunjung yang belum login pun bisa melihat nama pengguna.
[
  {
    "id": 1,
    "name": "User A",
    "slug": "user_a",
    "link": "https://example.com/author/user_a/"
  }
]
Situs dengan [Disable When Logged Out]
401
Permintaan tanpa login mendapat respons 401 beserta pesan.
{⏎  "code": "rest_authentication_error",⏎  "message": "Sorry, you do not have permission to make REST API requests.",⏎  "data": { "status": 401 }⏎}
slug Secara bawaan, slug berisi ID login apa adanya.
Sisi kiri hanya memuat empat item dari respons, yaitu id·name·slug·link, dan namanya contoh (user_a).


5️⃣ Memberi Pengecualian pada Jalur yang Diblokir

  • ↪️ Pengecualian jalur MCP · beda dengan menghapus tautan REST API

Saat perlu membuka jalur tertentu saja dalam keadaan diblokir, tambahkan jalur itu ke filter [perfmatters_rest_api_exceptions] milik Perfmatters. Masalah alat 0 pada konektor MCP claude.ai diselesaikan dengan membuat snippet PHP di menu [Code] Perfmatters dan menjadikan hanya jalur MCP sebagai pengecualian.

add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
    $exceptions[] = '/mcp/mcp-oauth-server';
    return $exceptions;
});

Setelah pengecualian dibuat pun, permintaan tanpa token diblokir langsung oleh MCP dengan pesan [MCP authentication required.] dan respons 401, sementara /wp-json/wp/v2/users tetap mengembalikan respons 401 dari Perfmatters.

🚦 Urutan yang dilewati permintaan
Sebelum pengecualian · permintaan MCP
Permintaan yang dikirim konektor MCP claude.ai setelah autentikasi selesai, dalam keadaan [Disable When Logged Out].
Perfmatters
Diblokir 401
→↓
Pemeriksaan token MCP
Tidak sampai
→↓
Hasil
Alat 0
Setelah pengecualian · permintaan MCP
/mcp/mcp-oauth-server Jalur ini sudah ditambahkan ke pengecualian Perfmatters.
Perfmatters
Lolos karena jalur pengecualian
→↓
Pemeriksaan token MCP
Diperiksa langsung oleh MCP
→↓
Hasil
401 jika tanpa token
[MCP authentication required.]
Setelah pengecualian · /wp-json/wp/v2/users
Jalur yang tidak dimasukkan ke pengecualian tetap diblokir.
Perfmatters
Diblokir 401
→↓
Hasil
Pemblokiran tampilan nama pengguna tetap
⚠️ Perfmatters memblokir permintaan sebelum MCP memeriksa token.

[Hapus Tautan REST API] di bagian [Core] yang sama hanya menghapus tautan api.w.org dari kepala halaman dan header respons; WP REST API sendiri tetap merespons.

🔢 FAQ & Konten yang Direkomendasikan

xmlrpc.php adalah alamat yang berbeda dari REST API, jadi tetap merespons meski REST API diblokir. Situs uji mencatat 734 permintaan POST ke xmlrpc.php dalam sehari pada 8 Oktober 2026, dan Perfmatters bisa memblokirnya dengan [Nonaktifkan XML-RPC] di bagian [Core] yang sama.

WP Rocket memasukkan alamat /wp-json/ ke daftar pengecualian cache, jadi respons REST API langsung berubah begitu disimpan. Pengaturan yang mengubah HTML halaman, seperti [Hapus Tautan REST API], baru berlaku setelah cache dikosongkan.

Tidak. Editor blok WordPress mengirim permintaan ke REST API saat menyimpan artikel, dan konektor MCP yang menghubungkan alat AI seperti claude.ai juga memakai jalur di bawah /wp-json/.

ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 8   +   7   =