Hushfort

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

  1. 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.

    Daftar pengguna REST publik di situsanda.com/wp-json/wp/v2/users yang menampilkan slug demo-admin
  2. 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.

    situsanda.com/?author=1 dialihkan ke situsanda.com/author/demo-admin/, halaman penulis berjudul Author: demo-admin
  3. 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.

    Pengaturan Penguatan Permukaan: daftar pengguna REST diblokir bagi pengunjung yang belum login, pemindaian penulis diblokir, daftar penulis di sitemap dan info penulis oEmbed dihapus
  4. 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.

    Alamat daftar pengguna REST yang sama kini menjawab rest_no_route dengan status 404

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:

  1. REST API — /wp-json/wp/v2/users mencantumkan penulis beserta slug-nya, yang biasanya sama dengan nama login mereka.
  2. Pemindaian penulis — /?author=1 mengalihkan ke /author/nama-login/.
  3. Arsip penulis — URL arsip itu sendiri berisi slug penulis.
  4. Sitemap bawaan — /wp-sitemap-users-1.xml mencantumkan 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/users tanpa 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/users bagi pengunjung yang belum login,
  • memblokir pemindaian ?author=N sambil 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?

Pengumpulan nama login sebuah situs dari URL publik, seperti ?author=1 atau daftar pengguna REST. Setelah namanya diketahui, penyerang tinggal menebak kata sandi.

Apakah nama pengguna yang terlihat merupakan risiko keamanan?

Jika berdiri sendiri, tidak, tetapi itu menghapus separuh tebakan. Menyembunyikan nama adalah langkah pengamanan kecil; kata sandi yang kuat, batas login, dan autentikasi dua faktor yang melakukan pekerjaan beratnya.

Apakah memblokir daftar pengguna REST akan merusak editor?

Tidak. Pengguna yang sudah login dikecualikan, jadi editor blok dan layar admin tetap berjalan seperti biasa. Ini hanya berpengaruh jika ada integrasi luar yang membaca daftar pengguna Anda tanpa login.

Bisakah saya tetap mempertahankan halaman arsip penulis?

Bisa. Anda dapat memblokir pemindaian nomor ?author= sementara arsip /author/nama/ tetap berfungsi. Untuk menyembunyikan nama sepenuhnya, beri penulis nama tampilan dan slug penulis yang berbeda dari nama login mereka.

Mengapa pesan kesalahan login penting?

Secara bawaan, WordPress memberi tahu apakah nama pengguna atau kata sandi yang salah. Itu memastikan nama pengguna mana yang ada. Pesan yang sama untuk keduanya menghapus petunjuk itu.

Laporkan bug atau minta fitur

Pesan Anda langsung diterima tim yang membangun Hushfort.

Tentang apa?

Hanya dipakai untuk membalas Anda.

Data ini hanya kami pakai untuk membalas Anda. Privasi