Bisakah saya mencegah enumerasi nama pengguna di situs wordpress saya? Saya dapat melihat pengguna saat ini menggunakan alat WPScan.
Bisakah saya mencegah enumerasi nama pengguna di situs wordpress saya? Saya dapat melihat pengguna saat ini menggunakan alat WPScan.
Jawaban:
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 RewriteRule
sangat 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]
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 Location
header pada respons HTTP untuk menemukan nama pengguna.
Menggunakan http://mysite.url
misalnya ...
WPScan akan memeriksa http://mysite.url/?author=1
. Jika situs Anda menggunakan permalink yang cantik, itu akan mengembalikan 301 redirect dengan Location
tajuk 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.
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:
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 .
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 :)
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.
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 Settings
panel ...
Match args: author=([0-9]*)
Rewrite type: 301 Permanent
Et voila, nama pengguna Anda aman [r]!
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.
Alih-alih .htaccess
rute, 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();
}
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.php
tema 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:
author=1
Jika Anda menggunakan permalinks, ini akan membuat arsip penulis dalam kebijaksanaan. Juga, jika URL akan seperti: /dummy?author=1
ini hanya akan menampilkan halaman untuk /dummy
.
Terima kasih atas jawaban Rarst untuk pertanyaan ini dan https://perishablepress.com/stop-user-enumeration-wordpress/
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?