Bagaimana cara mencegah user enumeration (bocornya nama pengguna) di WordPress?
Oleh Eureka Studio · Diperbarui
Jawaban singkat
WordPress menampilkan nama pengguna di empat tempat publik: endpoint REST /wp-json/wp/v2/users, pengalihan ?author=1, URL arsip penulis, dan sitemap pengguna bawaan. Untuk menyembunyikannya, blokir daftar REST bagi pengunjung yang belum login, hentikan pemindaian ?author=, hapus sitemap pengguna, dan samakan pesan kesalahan login. Sebuah plugin bisa mengerjakan keempatnya; uji masing-masing setelahnya.
Langkah-langkah
1Langkah 1
Lihat apa yang ditampilkan WordPress saat ini
Buka situsanda.com/wp-json/wp/v2/users dalam keadaan belum login. Pada instalasi bawaan, Anda akan mendapat daftar JSON berisi nama login setiap penulis di kolom slug.
2Langkah 2
Coba pemindaian penulis
Sekarang buka situsanda.com/?author=1. WordPress mengalihkan ke /author/nama-pengguna-anda/, sehingga nama itu muncul di bilah alamat. Bot menghitung naik 1, 2, 3 untuk mengumpulkan semua pengguna.
3Langkah 3
Tutup keempat tempat itu
Buka Hushfort → Penguatan Permukaan dan aktifkan. Biarkan Daftar pengguna REST, Pemindaian penulis ("Blokir pemindaian ?author=1"), Daftar penulis di sitemap, dan Info penulis oEmbed tetap aktif, lalu simpan.
4Langkah 4
Uji lagi dari jendela pribadi
Ulangi permintaan yang sama dalam keadaan belum login. Daftar pengguna kini menjawab "rest_no_route" dengan 404, dan ?author=1 tidak lagi mengalihkan ke nama pengguna.
User enumeration di WordPress berarti nama pengguna Anda bisa dibaca dari empat tempat publik: /wp-json/wp/v2/users, pengalihan ?author=1, arsip penulis, dan sitemap pengguna. Untuk mencegahnya, tutup keempatnya, samakan pesan kesalahan login, lalu uji masing-masing. Pindai Permukaan di Hushfort Security, plugin keamanan WordPress gratis, menunjukkan apa yang bocor; Perisai Nama Pengguna di Hushfort Pro menutupnya.
Mengapa ini penting
Untuk masuk, penyerang membutuhkan dua hal: nama pengguna dan kata sandi. WordPress, dalam pengaturan bawaannya, menyerahkan separuh yang pertama. Ini bukan bug; setiap tempat itu ada karena suatu alasan (feed untuk aplikasi, URL penulis yang rapi, mesin pencari). Namun bersama-sama, tempat-tempat itu memungkinkan bot mana pun menyusun daftar semua nama login di situs Anda dalam hitungan detik.
Menyembunyikan nama pengguna tidak membuat kata sandi yang lemah menjadi aman. Yang dilakukannya adalah menghapus separuh teka-teki yang mudah, sehingga setiap tebakan harus mencakup nama sekaligus kata sandi. Jika dipadukan dengan batas login dan login dua faktor, menebak berubah dari lambat menjadi sia-sia.
Empat tempat WordPress memublikasikan nama pengguna:
- REST API —
/wp-json/wp/v2/usersmencantumkan penulis beserta slug-nya, yang biasanya sama dengan nama login mereka. - Pemindaian penulis —
/?author=1mengalihkan ke/author/nama-login/. - Arsip penulis — URL arsip itu sendiri berisi slug penulis.
- Sitemap bawaan —
/wp-sitemap-users-1.xmlmencantumkan URL arsip penulis. Respons oEmbed juga bisa menyertakan informasi penulis.
Kesalahan umum
- Memperbaiki satu tempat lalu menganggapnya selesai. Menutup
?author=sementara daftar REST tetap terbuka tidak mengubah apa pun bagi bot. Periksa keempatnya. - Nama tampilan sama dengan nama login. Meskipun semua kebocoran sudah ditutup, tema yang mencetak "Posted by admin" tetap membocorkan nama itu. Atur nama tampilan yang berbeda di Pengguna → Profil.
- Merusak halaman penulis yang asli. Di blog dengan beberapa penulis, arsip penulis itu berguna. Blokir pemindaian nomornya, bukan arsipnya.
- Pesan kesalahan login yang terlalu rinci. "Kata sandi yang Anda masukkan untuk nama pengguna jane salah" memastikan bahwa nama itu ada. Gunakan satu pesan untuk kedua kasus.
Tanpa plugin
Sebagian besar hal ini bisa Anda tangani dengan plugin must-use
(wp-content/mu-plugins/hide-users.php):
<?php
// 1. Daftar pengguna REST: pengunjung yang belum login tidak mendapat apa-apa.
add_filter( 'rest_endpoints', function ( $endpoints ) {
if ( ! is_user_logged_in() ) {
unset( $endpoints['/wp/v2/users'], $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
}
return $endpoints;
} );
// 2. Pemindaian ?author=N: hentikan pengalihan yang membocorkan nama.
add_action( 'template_redirect', function () {
if ( isset( $_GET['author'] ) && ! is_admin() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );
// 3. Sitemap bawaan: buang penyedia users.
add_filter( 'wp_sitemaps_add_provider', function ( $provider, $name ) {
return 'users' === $name ? false : $provider;
}, 10, 2 );
// 4. Pesan yang sama untuk nama pengguna salah dan kata sandi salah.
add_filter( 'login_errors', function () {
return 'Nama pengguna atau kata sandi salah.';
} );
Catatan: uji dulu di situs staging, karena tema dan plugin terkadang membaca daftar pengguna REST. Kode ini tidak mengubah slug penulis di URL arsip; untuk itu, ubah nicename setiap penulis atau gunakan plugin nama tampilan. Dan ini menjadi satu file lagi yang harus Anda ingat saat memindahkan atau membangun ulang situs.
Jika ada yang salah
- Sebuah integrasi kehilangan daftar penulisnya. Beberapa alat eksternal membaca
/wp/v2/userstanpa login. Beri alat itu kata sandi aplikasi agar bisa melakukan autentikasi, atau izinkan kembali daftar tersebut. - Halaman penulis menampilkan 404. Anda memilih untuk menonaktifkan arsip penulis sepenuhnya. Ganti ke opsi yang hanya memblokir pemindaian nomor.
- Plugin SEO masih mencantumkan penulis. Banyak plugin SEO membuat sitemap penulisnya sendiri. Matikan juga sitemap penulis di plugin tersebut.
Dengan Hushfort
Perisai Nama Pengguna adalah bagian dari Hushfort Pro. Pindai Permukaan, yang menunjukkan apa yang masih bocor, ada di plugin gratis.
Perisai Nama Pengguna, bagian dari lapisan Penguatan Permukaan di Hushfort, menutup keempat tempat itu dalam satu layar:
- memblokir daftar REST
/wp/v2/usersbagi pengunjung yang belum login, - memblokir pemindaian
?author=Nsambil mempertahankan arsip/author/nama/(atau menonaktifkan arsip sepenuhnya, jika Anda mau), - menghapus sitemap pengguna bawaan dan detail penulis dari respons oEmbed,
- membuat pesan kesalahan login sama untuk nama pengguna yang salah dan kata sandi yang salah.
Setelah itu, Pindai Permukaan menguji setiap tempat dengan permintaan sungguhan dan menyebutkan nama pengguna mana pun yang masih bocor.
Pertanyaan umum
Apa itu user enumeration di WordPress?
Apakah nama pengguna yang terlihat merupakan risiko keamanan?
Apakah memblokir daftar pengguna REST akan merusak editor?
Bisakah saya tetap mempertahankan halaman arsip penulis?
Mengapa pesan kesalahan login penting?
Panduan terkait
Bagaimana cara cek keamanan WordPress dan melihat apa saja yang terbuka di situs saya?
Cek keamanan situs WordPress seperti bot melakukannya. Lima permintaan menunjukkan apakah login, XML-RPC, dan nama pengguna terbuka, serta cara menutupnya.
Lihat langkah-langkahnyaApa itu xmlrpc.php, dan bagaimana cara menonaktifkan XML-RPC di WordPress?
xmlrpc.php adalah pintu login kedua yang tetap terbuka saat halaman login disembunyikan. Cara menonaktifkan XML-RPC dengan aman dan mengujinya.
Lihat langkah-langkahnyaBagaimana cara membatasi percobaan login di WordPress untuk mencegah brute force?
Hentikan serangan brute force di WordPress dengan mengunci IP setelah beberapa kali login gagal. Pengaturan, kode manual, dan celah yang wajib ditutup.
Lihat langkah-langkahnya



