Tôi có thể ngăn chặn việc liệt kê tên người dùng không?


33

Tôi có thể ngăn chặn việc liệt kê tên người dùng trên trang wordpress của mình không? Tôi có thể thấy người dùng tại thời điểm này bằng cách sử dụng công cụ WPScan.


Tôi đã tạo một plugin để lấp lỗ hổng này, tìm nó trên Wordpress Plugins tại đây: wordpress.org/plugins/stop-user-enumutions
user2412827

Câu trả lời:


26

Một giải pháp đơn giản tôi sử dụng trong .htaccess:

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

Nó tương tự như câu trả lời của @ jptsetme, nhưng nó hoạt động ngay cả khi chuỗi truy vấn /?dummy&author=5và mẫu tìm kiếm RewriteRulerất nhanh: Bạn thường thấy một bản chụp ([0-9]*)trong các biểu thức thông thường cho điều này. Nhưng không cần lãng phí bộ nhớ cho việc chụp khi bạn không sử dụng biểu thức đã chụp và một trận đấu cho ký tự đầu tiên là đủ, vì bạn không muốn chấp nhận author=1b.

Cập nhật ngày 20.04.2017

Tôi đang thấy nhiều yêu cầu "bị hỏng" hơn từ những người thậm chí quá ngu ngốc khi thực hiện quét đơn giản. Các URL được yêu cầu trông như thế này:

/?author={num:2}

Vì vậy, bạn có thể mở rộng quy tắc trên thành:

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

13

Bạn không thể.

Công cụ WPScan là một tiện ích tự động tận dụng các URL thân thiện của WordPress để xác định tên người dùng. Nó sẽ lặp qua 10 ID đầu tiên có thể cho các tác giả và kiểm tra Locationtiêu đề trên phản hồi HTTP để tìm tên người dùng.

Sử dụng http://mysite.urlví dụ ...

WPScan sẽ kiểm tra http://mysite.url/?author=1. Nếu trang web của bạn đang sử dụng permalinks đẹp, nó sẽ trả về chuyển hướng 301 với Locationtiêu đề là http://mysite.url/author/username. Nếu trang web của bạn không sử dụng permalinks đẹp, thay vào đó, nó sẽ trả về trạng thái 200 (OK), vì vậy WPScan sẽ kiểm tra nguồn cấp dữ liệu cho chuỗi "bài đăng theo tên người dùng" và trích xuất tên người dùng.

Bạn có thể làm gì

Trước hết, chỉ vì ai đó có thể đoán tên người dùng của bạn, không có nghĩa là trang web của bạn không an toàn. Và thực sự không có cách nào bạn có thể ngăn ai đó phân tích trang web của bạn theo cách như vậy.

Tuy nhiên ...

Nếu bạn thực sự lo lắng về điều này, tôi khuyên bạn nên làm hai điều:

  1. Tắt permalinks khá. Điều này sẽ buộc WPScan và các công cụ tương tự phân tích nội dung trang web của bạn để lấy tên người dùng thay vì dựa vào URL.
  2. Buộc người dùng đặt một biệt danh khác. Trong trường hợp không có tên người dùng trong URL, các công cụ quét sẽ tìm kiếm "bài đăng theo tên người dùng" trong nội dung nguồn cấp dữ liệu / bài đăng thay thế. Nếu bạn không đặt tên người dùng ngoài đó, thì họ không thể bị bắt.

Một cách khác là thay đổi viết lại permalink tác giả của bạn. Có một số cách bạn có thể làm điều này, và bạn có thể cũng có thể tìm thấy một vài cách trên trang web này .


4

Không kiểm tra kỹ điều này, nhưng tôi nghĩ nên loại bỏ tài nguyên cơ bản hơn là cố gắng xây dựng các bức tường xung quanh nó ở cấp máy chủ web. Vì vậy, trong các thuật ngữ WP sẽ ngăn nó xử lý các biến truy vấn liên quan đến tác giả.

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 lưu ý rằng điều này sẽ giết hoàn toàn tài liệu lưu trữ của tác giả , có thể hoặc không thể là mức độ hoang tưởng thích hợp :)


3

Bạn có thể sử dụng quy tắc viết lại .htaccess để ngăn chặn việc tiết lộ thông tin này, nhưng bạn cũng nên chắc chắn sử dụng biệt danh để tránh tiết lộ tên người dùng trong nội dung có thể phân tích cú pháp như được mô tả bởi EAMann.

Blog sau đây mô tả cách thực hiện nhưng có lỗi đánh máy trong quy tắc viết lại: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumutions-secure-wordpress-against-hacking

Quy tắc chính xác cũng sẽ xóa chuỗi truy vấn khỏi URL được viết lại, nếu không bạn sẽ vẫn tiết lộ tên người dùng. Nó sẽ giống như thế này:

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

Làm việc tốt cho chúng tôi.


2

Tôi muốn thêm rằng bạn cũng có thể làm điều này trên nginx. Kiểm tra:
» Chặn liệt kê người dùng WordPress trên nginx - www.edwidget.name

Là một lưu ý phụ, tôi muốn ngăn việc liệt kê tên người dùng trên trang web của tôi được lưu trữ với WP Engine, điều này giới hạn quyền truy cập của người dùng vào các tệp cấu hình nginx cấp thấp. Tuy nhiên, họ có phần "Quy tắc chuyển hướng" trong bảng điều khiển cho phép bạn thực hiện việc này. Sau một thời gian, tôi đã tìm ra cấu hình tốt nhất:

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

Sau đó, bạn cần hiển thị Advanced Settingsbảng điều khiển ...

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

Et voila, tên người dùng của bạn an toàn [r]!


0

Tôi đã chặn hoàn toàn việc liệt kê người dùng khỏi WPScan bằng cách thêm vào phần sau trong 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]

Ý kiến ​​chuyên môn của tôi với tư cách là người kiểm tra thâm nhập cho một cơ quan của chính phủ ... đó là LUÔNđáng làm cho việc liệt kê thông tin về trang web của bạn trở nên khó khăn hơn. Vài người trong số các bạn sẽ có một trang web vượt lên trên google, các hacker kiddie script. Chúng tôi đang nói về bảo mật lớp và với mỗi lớp, bạn thêm thời gian và độ phức tạp vào một nỗ lực thâm nhập. Mỗi lớp cũng thêm vào các kỹ năng cần thiết của tin tặc. Có một vài tường lửa ứng dụng thực sự tốt có sẵn trên WP. Hãy tìm những địa chỉ có thể chặn các địa chỉ IP đã lặp lại các lần thử đăng nhập của người dùng hoặc 404. Ý tưởng là để tường lửa của bạn tự động chặn IP quét trang web của bạn để tìm các trang không tồn tại hoặc cố gắng đăng nhập nhiều lần vào trang web của bạn. Một tính năng tốt cũng bao gồm các khả năng chặn XSS và SQL Injection. Cân nhắc sử dụng, Bảo mật All In One WP từ Mẹo và Thủ thuật HQ, Peter, Ruhul, Ivy.


0

Thay vì .htaccesstuyến đường, một cách khác là thêm mã sau vào chủ đề con của bạn 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;
    }
}

Ngoài ra, bạn có thể thay đổi các liên kết tác giả mặc định được thêm vào tên người dùng của mỗi trang thành một trang khác (chẳng hạn như trang chủ), bằng cách sử dụng như sau:

# 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

Tôi biết đây là một bài viết cũ, nhưng để tham khảo trong tương lai tôi cũng muốn thêm giải pháp của mình. Đây chỉ là một đoạn để đưa vào functions.phpchủ đề của bạn. Nó sẽ để lại mọi thứ tại chỗ và làm việc, ngay cả tài liệu lưu trữ của tác giả, nhưng nó giết chết các yêu cầu liệt kê xấu.

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

Những gì nó làm:

  • nó quét URL cho một cái gì đó như: author=1
  • Khi tìm thấy nó sẽ loại bỏ biến tác giả khỏi các vars truy vấn để nó không bị truy vấn.

Nếu bạn sử dụng permalinks, điều này sẽ để lại tài liệu lưu trữ của tác giả. Ngoài ra, nếu URL sẽ là một cái gì đó như: /dummy?author=1điều này sẽ chỉ hiển thị trang cho /dummy.

Cảm ơn câu trả lời của Rarst cho câu hỏi này và https://perishablepress.com/stop-user-enumutions-wordpress/


0

Tôi muốn đăng tầm nhìn của riêng tôi:

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

Dòng đầu tiên chỉ phát hiện trang chủ. Tôi sẽ giải thích tại sao. Tính năng "liệt kê người dùng" này chỉ hoạt động trên trang chủ, do đó không cần phải viết lại tất cả các url.

Tiếp theo chúng ta tìm author=chuỗi truy vấn. Đó là điều hiển nhiên.

Cuối cùng, chúng tôi chỉ hiển thị trang gốc mà không có bất kỳ khối, chuyển hướng (301, 302) hoặc cấm (403). Nó không nên hoạt động như một trang với bất kỳ tham số vô dụng nào khác?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.