Hushfort

WordPress'te kullanıcı adlarını nasıl gizlerim (user enumeration)?

Yazan: Eureka Studio · Güncellendi

Kısa yanıt

WordPress kullanıcı adlarını herkese açık dört yerde gösterir: /wp-json/wp/v2/users REST uç noktası, ?author=1 yönlendirmeleri, yazar arşivi adresleri ve çekirdek kullanıcı site haritası. Bunları gizlemek için REST listesini oturum açmamış ziyaretçilere kapat, ?author= taramalarını durdur, kullanıcı site haritasını kaldır ve giriş hatalarını aynı hale getir. Bir eklenti dördünü de yapabilir; sonra her birini test et.

Adımlar

  1. 1Adım 1

    WordPress'in bugün ne gösterdiğine bak

    Oturum açmadan siten.com/wp-json/wp/v2/users adresine git. Varsayılan bir kurulumda, her yazarın giriş adını slug alanında içeren bir JSON listesi alırsın.

    yoursite.com/wp-json/wp/v2/users adresindeki herkese açık REST kullanıcı listesi, slug alanında demo-admin görünüyor
  2. 2Adım 2

    Yazar taramasını dene

    Şimdi siten.com/?author=1 adresine git. WordPress seni /author/kullanici-adin/ adresine yönlendirir ve adı adres çubuğuna yazar. Botlar tüm kullanıcıları toplamak için 1, 2, 3 diye sayar.

    yoursite.com/?author=1 adresi yoursite.com/author/demo-admin/ adresine yönlendirilmiş; başlığı Yazar: demo-admin olan bir yazar sayfası
  3. 3Adım 3

    Dört yeri kapat

    Hushfort → Yüzey Daraltma sekmesini aç ve katmanı aç. REST kullanıcı listesi, Yazar taraması ("?author=1 taramasını engelle"), Site haritası yazar listesi ve oEmbed yazar bilgisi ayarlarını açık bırak, sonra kaydet.

    Yüzey Daraltma ayarları: REST kullanıcı listesi oturum açmamış ziyaretçilere kapalı, yazar taramaları engelli, site haritası yazar listesi ve oEmbed yazar bilgisi kaldırılmış
  4. 4Adım 4

    Gizli bir pencereden yeniden test et

    Aynı istekleri oturum açmadan tekrarla. Kullanıcı listesi artık 404 ile "rest_no_route" cevabı verir ve ?author=1 artık bir kullanıcı adına yönlendirmez.

    Aynı REST kullanıcı listesi adresi artık 404 durumuyla rest_no_route cevabı veriyor

Neden önemli

Giriş yapmak için bir saldırganın iki şeye ihtiyacı var: bir kullanıcı adı ve bir parola. WordPress, kutudan çıktığı haliyle ilk yarısını teslim eder. Bu bir hata değil; her yerin bir varlık sebebi var (uygulamalar için akışlar, düzgün yazar adresleri, arama motorları). Ama hepsi bir araya gelince herhangi bir bot sitendeki tüm giriş adlarının listesini saniyeler içinde çıkarabilir.

Kullanıcı adlarını gizlemek zayıf bir parolayı güvenli yapmaz. Yaptığı şey bulmacanın kolay yarısını ortadan kaldırmaktır; böylece her tahmin hem adı hem parolayı tutturmak zorunda kalır. Deneme sınırı ve iki adımlı girişle birlikte bu, tahmini yavaştan umutsuza çevirir.

WordPress'in kullanıcı adlarını yayınladığı dört yer:

  1. REST API — /wp-json/wp/v2/users, yazarları genellikle giriş adlarıyla aynı olan slug değerleriyle listeler.
  2. Yazar taramaları — /?author=1, /author/giris-adi/ adresine yönlendirir.
  3. Yazar arşivleri — arşiv adresinin kendisi yazar slug'ını içerir.
  4. Çekirdek site haritası — /wp-sitemap-users-1.xml yazar arşivi adreslerini listeler. oEmbed cevapları da yazar bilgisi içerebilir.

Sık yapılan hatalar

  • Bir yeri düzeltip işi bitmiş saymak. REST listesi açık kalırken ?author= taramasını kapatmak bir bot için hiçbir şeyi değiştirmez. Dördünü de kontrol et.
  • Görünen adın giriş adıyla aynı olması. Tüm sızıntılar kapalı olsa bile "admin tarafından yayınlandı" yazan bir tema adı ele verir. Kullanıcılar → Profil altında farklı bir görünen ad belirle.
  • Gerçek yazar sayfalarını bozmak. Birkaç yazarı olan bir blogda yazar arşivleri işe yarar. Arşivlerin kendisi yerine numara taramalarını engelle.
  • Ayrıntılı giriş hataları. "jane kullanıcı adı için girdiğiniz parola hatalı" mesajı adın var olduğunu doğrular. İki durum için de tek bir mesaj kullan.

Eklentisiz

Bunun çoğunu bir must-use eklentisiyle (wp-content/mu-plugins/hide-users.php) karşılayabilirsin:

<?php
// 1. REST user list: logged-out visitors get nothing.
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. ?author=N scans: stop the redirect that reveals the name.
add_action( 'template_redirect', function () {
    if ( isset( $_GET['author'] ) && ! is_admin() ) {
        wp_safe_redirect( home_url( '/' ), 301 );
        exit;
    }
} );

// 3. Core sitemap: drop the users provider.
add_filter( 'wp_sitemaps_add_provider', function ( $provider, $name ) {
    return 'users' === $name ? false : $provider;
}, 10, 2 );

// 4. Same message for wrong username and wrong password.
add_filter( 'login_errors', function () {
    return 'The username or password is incorrect.';
} );

Dikkat edilecekler: önce bir test sitesinde dene, çünkü temalar ve eklentiler bazen REST kullanıcı listesini okur. Bu kod arşiv adreslerindeki yazar slug'ını değiştirmez; bunun için her yazarın nicename değerini değiştir ya da bir görünen ad eklentisi kullan. Ayrıca siteyi taşırken ya da yeniden kurarken takip etmen gereken bir dosya daha demektir.

Bir şeyler ters giderse

  • Bir entegrasyon yazar listesini kaybetti. Bazı dış araçlar /wp/v2/users listesini oturum açmadan okur. Kimlik doğrulayabilmeleri için onlara bir uygulama parolası ver ya da listeye yeniden izin ver.
  • Yazar sayfaları 404 gösteriyor. Yazar arşivlerini tamamen kapatmayı seçmişsin. Yalnızca numara taramalarını engelleyen seçeneğe geç.
  • SEO eklentisi hâlâ yazarları listeliyor. Birçok SEO eklentisi kendi yazar site haritasını üretir. O eklentide de yazar site haritalarını kapat.

Hushfort ile

Kullanıcı Adı Kalkanı Hushfort Pro'nun parçasıdır. Hâlâ neyin sızdığını gösteren Yüzey Taraması ise ücretsiz WordPress güvenlik eklentisi Hushfort Security'de yer alır.

Hushfort'un Yüzey Daraltma katmanının bir parçası olan Kullanıcı Adı Kalkanı dört yeri tek bir ekrandan kapatır:

  • REST /wp/v2/users listesini oturum açmamış ziyaretçilere kapatır,
  • /author/ad/ arşivlerini koruyarak ?author=N taramalarını engeller (istersen arşivleri tamamen kapatır),
  • çekirdek kullanıcı site haritasını ve oEmbed cevaplarındaki yazar bilgilerini kaldırır,
  • giriş hata mesajlarını yanlış kullanıcı adı ve yanlış parola için aynı hale getirir.

Ardından Yüzey Taraması her yeri gerçek isteklerle test eder ve hâlâ sızan her kullanıcı adını tek tek söyler.

Sık sorulan sorular

WordPress'te kullanıcı adı taraması (user enumeration) nedir?

Bir sitenin giriş adlarını ?author=1 ya da REST kullanıcı listesi gibi herkese açık adreslerden toplamaktır. Adlar bilindiğinde saldırganların yalnızca parolaları tahmin etmesi gerekir.

Kullanıcı adımın görünmesi bir güvenlik riski mi?

Tek başına değil, ama tahmin işinin yarısını ortadan kaldırır. Adları gizlemek küçük bir sağlamlaştırma adımıdır; asıl yükü güçlü parolalar, deneme sınırı ve iki adımlı doğrulama taşır.

REST kullanıcı listesini engellemek düzenleyiciyi bozar mı?

Hayır. Oturum açmış kullanıcılar muaftır; blok düzenleyici ve yönetim ekranları her zamanki gibi çalışır. Bu yalnızca dışarıdaki bir entegrasyon kullanıcı listeni oturum açmadan okuyorsa önemlidir.

Yazar arşivi sayfalarını tutabilir miyim?

Evet. /author/ad/ arşivleri çalışmaya devam ederken ?author= numara taramalarını engelleyebilirsin. Adları tamamen gizlemek için yazarlara giriş adlarından farklı bir görünen ad ve yazar slug'ı ver.

Giriş hata mesajları neden önemli?

WordPress varsayılan olarak yanlış olanın kullanıcı adı mı parola mı olduğunu söyler. Bu da hangi kullanıcı adlarının var olduğunu doğrular. İkisi için de aynı mesaj bu ipucunu ortadan kaldırır.

Hata bildir ya da özellik iste

Mesajın doğrudan Hushfort’u geliştiren ekibe gider.

Konu ne?

Yalnızca sana yanıt vermek için kullanılır.

Bu bilgileri yalnızca sana yanıt vermek için kullanırız. Gizlilik