Bisakah saya mencegah pencacahan nama pengguna?

33

Bisakah saya mencegah enumerasi nama pengguna di situs wordpress saya? Saya dapat melihat pengguna saat ini menggunakan alat WPScan.

urok93
sumber
Saya membuat sebuah plugin untuk mengisi lubang ini dan menemukannya di Wordpress Plugins di sini: wordpress.org/plugins/stop-user-enumeration
user2412827

Jawaban:

26

Solusi sederhana yang saya gunakan dalam .htaccess:

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

Ini mirip dengan jawaban @ jptsetme, tetapi berfungsi bahkan ketika string kueri /?dummy&author=5, dan pola pencariannya RewriteRulesangat cepat: Anda sering melihat tangkapan ([0-9]*)dalam ekspresi reguler untuk ini. Tetapi tidak perlu membuang memori untuk tangkapan ketika Anda tidak menggunakan ekspresi yang ditangkap, dan kecocokan untuk karakter pertama sudah cukup, karena Anda tidak ingin menerima author=1b.

Pembaruan 20.04.2017

Saya melihat lebih banyak permintaan "rusak" dari orang-orang yang bahkan terlalu bodoh untuk menjalankan pemindaian sederhana. URL yang diminta terlihat seperti ini:

/?author={num:2}

Jadi, Anda dapat memperluas aturan di atas ke:

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

Kamu tidak bisa

Alat WPScan adalah utilitas otomatis yang memanfaatkan URL ramah WordPress untuk menentukan nama pengguna. Ini akan mengulangi 10 kemungkinan ID pertama untuk penulis dan memeriksa Locationheader pada respons HTTP untuk menemukan nama pengguna.

Menggunakan http://mysite.urlmisalnya ...

WPScan akan memeriksa http://mysite.url/?author=1. Jika situs Anda menggunakan permalink yang cantik, itu akan mengembalikan 301 redirect dengan Locationtajuk http://mysite.url/author/username. Jika situs Anda tidak menggunakan permalink cantik, itu akan mengembalikan status 200 (OK), jadi WPScan akan memeriksa umpan untuk string "posting dengan nama pengguna" dan mengekstrak nama pengguna.

Apa yang bisa kamu lakukan

Pertama-tama, hanya karena seseorang dapat menebak nama pengguna Anda, bukan berarti situs Anda tidak aman. Dan benar-benar tidak ada cara Anda dapat mencegah seseorang mengurai situs Anda sedemikian rupa.

Namun ...

Jika Anda benar-benar khawatir tentang ini, saya akan merekomendasikan melakukan dua hal:

  1. Matikan permalink cantik. Ini akan memaksa WPScan dan alat serupa untuk mem-parsing konten situs Anda untuk nama pengguna daripada mengandalkan URL.
  2. Paksa pengguna untuk menetapkan nama panggilan yang berbeda. Dengan tidak adanya nama pengguna di URL, alat pemindaian akan mencari "kiriman menurut nama pengguna" di konten umpan / kiriman. Jika Anda tidak menempatkan nama pengguna di luar sana, maka mereka tidak dapat ditangkap.

Alternatif lain adalah mengubah penulisan ulang permalink penulis Anda. Ada beberapa cara Anda dapat melakukan ini, dan Anda mungkin dapat menemukan beberapa di situs ini juga .

EAMann
sumber
4

Tidak menguji ini secara menyeluruh, tapi saya pikir lebih baik untuk menghapus sumber daya yang mendasarinya daripada mencoba membangun dinding di sekitarnya pada tingkat server web. Jadi dalam istilah WP yang akan menghentikannya dari memproses variabel permintaan yang berhubungan dengan penulis.

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;
        }
    );
}

Catatan PS bahwa ini akan membunuh arsip penulis sepenuhnya , yang mungkin atau mungkin tidak sesuai tingkat paranoia :)

Jarang
sumber
3

Anda dapat menggunakan aturan penulisan ulang .htaccess untuk mencegah pengungkapan ini, tetapi Anda juga harus memastikan untuk menggunakan nama panggilan untuk menghindari pengungkapan nama pengguna dalam konten yang dapat diuraikan seperti dijelaskan oleh EAMann.

Blog berikut menjelaskan cara melakukannya tetapi memiliki kesalahan ketik dalam aturan penulisan ulang: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

Aturan yang benar juga harus menghapus string kueri dari URL yang ditulis ulang, atau Anda masih akan mengungkapkan nama pengguna. Seharusnya terlihat seperti ini:

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

Bekerja dengan baik untuk kita.

jptsetme
sumber
2

Saya ingin menambahkan bahwa Anda dapat melakukan ini di nginx juga. Periksa:
» Memblokir Pencacahan Pengguna WordPress di nginx - www.edwidget.name

Sebagai catatan, saya ingin mencegah enumerasi nama pengguna di situs saya yang dihosting dengan WP Engine, yang membatasi akses pengguna ke file konfigurasi nginx tingkat rendah. Namun mereka memiliki bagian "Aturan Pengalihan" di panel kontrol mereka yang memungkinkan Anda untuk melakukan ini. Setelah beberapa waktu saya berhasil menemukan konfigurasi terbaik:

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

Maka Anda perlu menunjukkan Advanced Settingspanel ...

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

Et voila, nama pengguna Anda aman [r]!

cfx
sumber
0

Saya benar-benar memblokir enumerasi pengguna dari WPScan dengan menambahkan berikut ini di htaccess

# 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]

Pendapat profesional saya sebagai penguji penetrasi untuk sebuah lembaga pemerintah ... itu SELALULayak membuatnya lebih sulit untuk menyebutkan informasi tentang situs web Anda. Beberapa dari Anda akan memiliki situs web yang naik di atas google, skrip kiddie hacker. Kita berbicara tentang keamanan berlapis dan dengan setiap lapisan, Anda menambah waktu dan kerumitan upaya penetrasi. Setiap layer juga menambah skill yang dibutuhkan oleh hacker. Ada beberapa firewall aplikasi yang sangat bagus tersedia di WP. Cari yang dapat memblokir alamat IP yang telah mengulangi upaya login pengguna atau 404. Idenya adalah firewall Anda untuk secara otomatis memblokir IP yang memindai situs web Anda untuk halaman yang tidak ada atau mencoba untuk berulang kali masuk ke situs Anda. Fitur yang baik juga mencakup kemampuan memblokir XSS dan SQL Injection. Pertimbangkan untuk menggunakan, All In One WP Security dari Tip and Tricks HQ, Peter, Ruhul, Ivy.

Walter
sumber
0

Alih-alih .htaccessrute, alternatif lain adalah menambahkan kode berikut ke tema anak Anda 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;
    }
}

Selain itu, Anda dapat mengubah tautan penulis default yang ditambahkan ke nama pengguna setiap halaman menjadi sesuatu yang lain (seperti beranda), dengan menggunakan yang berikut:

# 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();
}
Ethan Jinks O'Sullivan
sumber
0

Saya tahu ini adalah posting lama, tetapi untuk referensi di masa mendatang saya ingin menambahkan solusi saya juga. Ini hanya cuplikan untuk dimasukkan ke dalam functions.phptema Anda. Itu akan meninggalkan semuanya di tempat dan bekerja, bahkan arsip penulis, tetapi itu membunuh permintaan enumerasi yang buruk.

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;
}

Apa fungsinya:

  • itu memindai URL untuk sesuatu seperti: author=1
  • Ketika ditemukan itu akan menghapus variabel penulis dari vars permintaan sehingga tidak akan ditanyai.

Jika Anda menggunakan permalinks, ini akan membuat arsip penulis dalam kebijaksanaan. Juga, jika URL akan seperti: /dummy?author=1ini hanya akan menampilkan halaman untuk /dummy.

Terima kasih atas jawaban Rarst untuk pertanyaan ini dan https://perishablepress.com/stop-user-enumeration-wordpress/

leendertvb
sumber
0

Saya ingin memposting visi saya sendiri:

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

Baris pertama hanya mendeteksi beranda. Saya akan menjelaskan alasannya. Fitur "pengguna-enumerasi" ini hanya berfungsi di halaman rumah, jadi tidak perlu menulis ulang semua url.

Selanjutnya kita mencari author=string kueri. Sudah jelas.

Akhirnya, kami hanya menampilkan halaman asli tanpa blok, arahan ulang (301, 302) atau larangan (403). Bukankah seharusnya bertindak seperti halaman dengan parameter tidak berguna lainnya?

vladkras
sumber