Kullanıcı Adı Numaralandırmasını Önleyebilir miyim?


Yanıtlar:


26

Kullandığım basit bir çözüm .htaccess:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ - [L,R=403]

@ Jptsetme'nin cevabına benzer, ancak sorgu dizesi olduğunda /?dummy&author=5ve arama deseni RewriteRuleçok hızlı olsa bile çalışır : Sık sık bunun ([0-9]*)için düzenli ifadelerde bir yakalama görürsünüz . Ancak, yakalanan ifadeyi kullanmadığınızda yakalama için hafızayı boşa harcamaya gerek yoktur ve ilk karakter için bir eşleşme yeterlidir, çünkü kabul etmek istemezsiniz author=1b.

20.04.2017 Güncellemesi

Basit bir tarama yapamayacak kadar aptal olan insanlardan daha "kırılmış" talepler görüyorum. İstenen URL'ler şuna benzer:

/?author={num:2}

Böylece yukarıdaki kuralı genişletebilirsiniz:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author=\{num 
RewriteRule ^ - [L,R=403]

13

Yapamazsın

WPScan aracı, kullanıcı adlarını belirlemek için WordPress'in kullanıcı dostu URL'lerinden yararlanan otomatik bir yardımcı programdır. Yazarlar için ilk 10 olası ID'yi geçecek ve Locationbir kullanıcı adı bulmak için HTTP yanıtı üstbilgisini kontrol edecektir .

Kullanımı http://mysite.urlörneğin ...

WPScan kontrol edecek http://mysite.url/?author=1. Siteniz oldukça kalıcı bağlantılar kullanıyorsa, Locationbaşlığı olan bir 301 yönlendirmesi döndürür http://mysite.url/author/username. Siteniz Eğer değil oldukça kalıcı bağlantı kullanarak WPScan "kullanıcı adına göre mesajların" dizesi için beslemeyi kontrol ve kullanıcı adı ayıklamak böylece, bu, yerine 200 () durumu dönecektir.

Ne yapabilirsin

Her şeyden önce, birileri kullanıcı adınızı tahmin edebildiğinden, sitenizin güvensiz olduğu anlamına gelmez. Ve birisinin sitenizi böyle bir şekilde ayrıştırmasını engelleyemezsiniz.

Ancak ...

Bu konuda gerçekten endişeleniyorsanız, iki şey yapmanızı öneririm:

  1. Güzel kalıcı bağlantıları kapat. Bu, WPScan ve benzeri araçları sitenizin içeriğini URL’ye güvenmek yerine kullanıcı adları için ayrıştırmaya zorlar.
  2. Kullanıcıları farklı bir takma ad belirlemeye zorlayın. URL’de bir kullanıcı adı yoksa, tarama araçları bunun yerine feed / post içeriğinde "kullanıcı adına göre gönderiler" i arar. Eğer kullanıcı adlarını oraya koymuyorsan, o zaman kullanılamazlar.

Başka bir alternatif de yazarın kalıcı bağlantısını yeniden yazmaktır. Bunu yapmanın birkaç yolu vardır ve muhtemelen bu sitede de birkaç tane bulabilirsiniz .


4

Bunu ayrıntılı bir şekilde test etmedim, ancak çevresinde web sunucusu düzeyinde duvarlar inşa etmeyi denemek yerine altta yatan kaynağı kaldırmanın tercih edileceğini düşünüyorum. Dolayısıyla WP terimlerinde yazarla ilgili sorgu değişkenlerini işlemekten alıkoyacak olan terimler var.

if ( ! is_admin() ) {
    add_filter(
        'query_vars',
        function ( $public_query_vars ) {

            foreach ( array( 'author', 'author_name' ) as $var ) {
                $key = array_search( $var, $public_query_vars );
                if ( false !== $key ) {
                    unset( $public_query_vars[$key] );
                }
            }

            return $public_query_vars;
        }
    );
}

PS , bunun paranoya seviyesine uygun olabilecek veya olmayabilecek yazar arşivlerini tamamen öldüreceğini kaydetti :)


3

Bu açıklamayı önlemek için bir .htaccess yeniden yazma kuralı kullanabilirsiniz, ancak kullanıcı adlarını EAMann tarafından açıklanan şekilde ayrıştırılabilir içerikte ifşa etmekten kaçınmak için takma adlar kullandığınızdan da emin olmalısınız.

Aşağıdaki blogda bunun nasıl yapılacağı açıklanmaktadır ancak yeniden yazma kuralında bir yazım hatası vardır: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

Doğru kural, sorgu dizesini yeniden yazılmış URL'den kaldırmalıdır, aksi takdirde kullanıcı adını yine de ifşa edersiniz. Bu gibi görünmeli:

# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yoursite.com/somepage/? [L,R=301]

Bizim için iyi çalışıyor.


2

Bunu nginx'te de yapabileceğini eklemek istedim. Kontrol Et:
» nginx'te WordPress Kullanıcı Numaralandırmasını Engelleme - www.edwidget.name

Bir ek not olarak, kullanıcıların düşük seviyeli nginx config dosyalarına erişimlerini sınırlayan WP Engine'de barındırılan sitemde kullanıcı adı numaralandırmasını önlemek istedim. Bununla birlikte, kontrol panelinde bunu gerçekleştirmenize izin veren bir "Yönlendirme Kuralları" bölümü vardır. Bir süre sonra en iyi konfigürasyonu çözmeyi başardım:

Redirect Name: // choose a description for the rewrite
Domain: // you *must* select a domain; "All Domains" will *not* work here!
Source: ^/$
Destination: /?

O zaman Advanced Settingspaneli göstermelisin ...

Match args: author=([0-9]*)
Rewrite type: 301 Permanent

Ve kullanıcı adınız güvende [r]!


0

Aşağıdakileri htaccess ekleyerek WPScan'dan kullanıcı numaralandırmasını tamamen engelledim

# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yourdomain.com [L,R=301]
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

Bir ajans için bir nüfuz test cihazı olarak benim profesyonel görüşüm ... HER ZAMANweb siteniz hakkında bilgi numaralandırmayı zorlaştırmaya değer. Bazılarınız google, script kiddie korsanlarının üzerine yükselen bir web sitesine sahip olacak. Katmanlı güvenlikten bahsediyoruz ve her katmanda penetrasyon girişimlerine zaman ve karmaşıklık ekliyorsunuz. Her katman aynı zamanda bilgisayar korsanının gerektirdiği becerilere de ekler. WP'de bulunan birkaç gerçekten iyi uygulama güvenlik duvarı var. Kullanıcı girişi tekrarlama girişimleri veya 404'ü tekrarlayan IP adreslerini engelleyebilecek olanları arayın. Güvenlik duvarınızın, var olmayan sayfalar için web sitenizi tarayan veya sitenizi tekrar tekrar imzalamayı deneyen IP'leri otomatik olarak engellemesidir. İyi bir özellik ayrıca XSS ve SQL Injection engelleme yeteneklerini içerir. İpuçları ve Püf Noktalarından Hepsi Bir Arada WP Güvenliği kullanmayı düşünün HQ, Peter, Ruhul, Ivy.


0

.htaccessRota yerine , başka bir alternatif de çocuğunuzun temasına aşağıdaki kodu eklemektir functions.php:

# Redirect author page to homepage
add_action( 'template_redirect', 'wpse_46469_author_page' );

function wpse_46469_author_page() {
    # If the author archive page is being accessed, redirect to homepage
    if ( is_author() ) {
        wp_safe_redirect( get_home_url(), 301 );
        exit;
    }
}

Ek olarak, aşağıdakileri kullanarak her sayfanın kullanıcı adına eklenen varsayılan yazar bağlantılarını başka bir şeye (ana sayfa gibi) değiştirebilirsiniz:

# Replace author URL with the homepage
add_filter( 'author_link', 'wpse_46469_author_link' ); 

function wpse_46469_author_link() {
    # Return homepage URL
    return home_url();
}

0

Bunun eski bir gönderi olduğunu biliyorum, ancak gelecekteki referanslar için de çözümümü eklemek istiyorum. Bu sadece functions.phptemanızın içine koymak için bir snippet . Yazar arşivleri dahil her şeyi yerinde ve çalışır durumda bırakacak, ancak kötü numaralandırma isteklerini ortadan kaldıracak.

if (!is_admin()) {
    if( preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ) {
        add_filter( 'query_vars', 'iside_remove_author_from_query_vars' );
    }
    add_filter('redirect_canonical', 'iside_remove_author_from_redirects', 10, 2);
}
function iside_remove_author_from_redirects($redirect, $request) {
    if( !is_admin() && preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ) {
        add_filter( 'query_vars', 'iside_remove_author_from_query_vars' );
    }
    return $redirect;
}
function iside_remove_author_from_query_vars( $query_vars ) {
    if( !is_admin() ) {
        foreach( array( 'author', 'author_name' ) as $var ) {
            $key = array_search( $var, $query_vars );
            if ( false !== $key ) {
                unset( $query_vars[$key] );
            }
        }
    }
    return $query_vars;
}

Bu ne yapar:

  • URL’yi aşağıdaki gibi bir şey için tarar: author=1
  • Bulunduğunda yazar değişkenini sorgu değişkenlerinden kaldıracak ve sorgulanmayacaktır.

Eğer kalıcı bağlantılar kullanıyorsanız, bu yazar arşivlerini inceliğini koruyacaktır. Ayrıca, URL aşağıdaki gibi /dummy?author=1olacaktır : bu sadece sayfasını gösterecektir /dummy.

Rarst'ın bu soruya yanıtı ve https://perishablepress.com/stop-user-enumeration-wordpress/


0

Kendi vizyonumu yayınlamak istiyorum:

RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^author= [NC]
RewriteRule (.*) $1? [L]

İlk satır yalnızca giriş sayfasını algılar. Nedenini açıklayacağım. Bu "kullanıcı numaralandırma" özelliği yalnızca ana sayfada çalışır, bu nedenle tüm URL'leri yeniden yazmaya gerek yoktur.

Sonra author=sorgu dizesini arayacağız . Çok açık.

Son olarak, orijinal sayfayı sadece herhangi bir blok, yönlendirme (301, 302) veya yasak (403) olmadan gösteririz . Başka bir işe yaramaz parametresi olan bir sayfa gibi davranmamalı mı?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.