사용자 이름 열거를 방지 할 수 있습니까?


답변:


26

내가 사용하는 간단한 솔루션 .htaccess:

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

@jptsetme의 답변과 비슷하지만 쿼리 문자열이 /?dummy&author=5이고 검색 패턴 RewriteRule이 매우 빠른 경우에도 작동합니다 .이 경우 ([0-9]*)정규 표현식 으로 캡처하는 경우가 많습니다 . 그러나 캡처 된 식을 사용하지 않으면 캡처를 위해 메모리를 낭비 할 필요가 없으며 첫 번째 문자와 일치하면 충분하지 않습니다 author=1b.

20.04.2017 업데이트

간단한 검사를 수행하기에는 너무 어리석은 사람들의 요청이 더 많았습니다. 요청 된 URL은 다음과 같습니다.

/?author={num:2}

따라서 위의 규칙을 다음과 같이 확장 할 수 있습니다.

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

13

당신은 할 수 없습니다.

WPScan 도구는 사용자 이름을 결정하기 위해 WordPress의 친숙한 URL을 이용하는 자동화 된 유틸리티입니다. 작성자의 처음 10 개의 가능한 ID를 반복Location 하고 HTTP 응답 에서 헤더를 확인하여 사용자 이름을 찾습니다.

http://mysite.url예를 들어 사용 ...

WPScan이 확인 http://mysite.url/?author=1합니다. 사이트에서 예쁜 퍼머 링크를 사용하는 경우 Location헤더가 301 인 리디렉션이 반환됩니다 http://mysite.url/author/username. 사이트에서 예쁜 퍼머 링크를 사용 하지 않는 경우 대신 200 (OK) 상태를 반환하므로 WPScan은 "사용자 이름 별 게시물"문자열에 대한 피드를 확인하고 사용자 이름을 추출합니다.

할 수있는 일

우선, 누군가가 사용자 이름을 추측 할 수 있다고해서 사이트가 안전하지 않다는 의미는 아닙니다. 그리고 누군가가 그런 식으로 귀하의 사이트를 파싱하는 것을 막을 수있는 방법은 없습니다.

그러나 ...

이 점에 대해 정말로 염려한다면 다음 두 가지를 수행하는 것이 좋습니다.

  1. 예쁜 퍼머 링크를 끄십시오. 이렇게하면 WPScan 및 유사한 도구가 URL에 의존하지 않고 사용자 이름에 대한 사이트 컨텐츠를 구문 분석해야합니다.
  2. 사용자가 다른 닉네임을 설정하도록합니다. URL에 사용자 이름이 없으면 검색 도구가 대신 피드 / 포스트 콘텐츠에서 "사용자 이름 별 게시물"을 검색합니다. 사용자 이름을 입력하지 않으면 사용자 이름을 숨길 수 없습니다.

또 다른 대안은 저자의 퍼머 링크 재 작성을 변경하는 것입니다. 이 작업을 수행 할 수있는 몇 가지 방법 이 있으며이 사이트에서도 몇 가지를 찾을있습니다 .


4

이것을 철저히 테스트하지는 않았지만 웹 서버 수준에서 주변 벽을 구축하는 대신 기본 리소스를 제거하는 것이 좋습니다. 따라서 WP 용어에서는 작성자 관련 쿼리 변수를 처리하지 못하게합니다.

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

추신 : 이것은 저자 편집 자료를 완전히 죽일 것이며 , 이는 편집증 수준이 아닐 수도 있습니다 :)


3

.htaccess 다시 쓰기 규칙을 사용하여이 공개를 방지 할 수 있지만 EAMann에 설명 된대로 구문 분석 가능한 콘텐츠에 사용자 이름이 공개되지 않도록 닉네임을 사용해야합니다.

다음 블로그에서는이를 수행하는 방법을 설명하지만 재 작성 규칙에는 오타가 있습니다. http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

올바른 규칙은 다시 작성된 URL에서 쿼리 문자열을 제거해야하며, 그렇지 않으면 사용자 이름을 공개해야합니다. 다음과 같아야합니다.

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

우리를 위해 잘 작동합니다.


2

nginx 에서도이 작업을 수행 할 수 있다고 덧붙이고 싶습니다. 확인 :
» nginx에서 WordPress 사용자 열거 차단-www.edwidget.name

참고로, WP Engine으로 호스팅되는 내 사이트에서 사용자 이름 열거를 방지하여 하위 수준의 nginx 구성 파일에 대한 사용자의 액세스를 제한했습니다. 그러나 제어판에 "리디렉션 규칙"섹션이있어이를 수행 할 수 있습니다. 얼마 후 나는 최고의 구성을 알아 냈습니다.

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

그런 다음 Advanced Settings패널 을 표시해야합니다 ...

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

짜잔, 당신의 사용자 이름은 안전합니다 [r]!


0

htaccess에 다음을 추가하여 WPScan에서 사용자 열거를 완전히 차단했습니다.

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

정부 기관의 침투 테스터로서의 나의 전문적인 의견은 ... 그것은 항상귀하의 웹 사이트에 대한 정보를 열거하기 어렵게 할 가치가 있습니다. 여러분 중 몇 명은 구글, 스크립트 아동 해커보다 우월한 웹 사이트를 가질 것입니다. 계층화 된 보안에 대해 이야기하고 있으며 각 계층마다 침투 시도에 시간과 복잡성을 더합니다. 각 계층은 해커에게 필요한 스킬 셋에 추가됩니다. WP에는 유용한 방화벽이 몇 가지 있습니다. 반복적으로 사용자 로그인 시도 또는 404를 반복하는 IP 주소를 차단할 수있는 주소를 찾으십시오. 아이디어는 방화벽이 존재하지 않는 페이지를 웹 사이트를 스캔하거나 사이트에 반복적으로 로그인을 시도하는 IP를 자동으로 차단하는 것입니다. 좋은 기능에는 XSS 및 SQL 주입 차단 기능도 포함됩니다. Tips and Tricks HQ, Peter, Ruhul, Ivy의 올인원 WP 보안 사용을 고려하십시오.


0

.htaccess경로 대신에 다른 대안은 다음 코드를 자식 테마에 추가하는 것입니다 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;
    }
}

또한 다음을 사용하여 각 페이지의 사용자 이름에 추가 된 기본 작성자 링크를 다른 것으로 (예 : 홈페이지) 변경할 수 있습니다.

# 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

나는 이것이 오래된 게시물이라는 것을 알고 있지만 나중에 참조 할 수 있도록 솔루션을 추가하고 싶습니다. 이것은 functions.php당신의 테마 에 넣을 스 니펫 일뿐 입니다. 작성자 아카이브까지 모든 것을 제자리에두고 작동시킬 수 있지만 잘못된 열거 요청을 제거합니다.

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

그것이하는 일 :

  • 다음과 같은 URL을 스캔합니다. author=1
  • 발견되면 쿼리 변수에서 author 변수가 제거되므로 쿼리되지 않습니다.

영구 링크를 사용하면 작성자 아카이브가 그대로 유지됩니다. 또한 URL이 다음과 같은 경우 : /dummy?author=1의 페이지 만 표시됩니다 /dummy.

이 질문에 대한 Rarst의 답변과 https://perishablepress.com/stop-user-enumeration-wordpress/ 덕분에


0

내 비전을 게시하고 싶습니다 :

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

첫 줄은 홈페이지 만 감지합니다. 이유를 설명하겠습니다. 이 "사용자 열거"기능은 홈 페이지에서만 작동하므로 모든 URL을 다시 쓰지 않아도됩니다.

다음으로 author=쿼리 문자열을 찾습니다. 분명하다.

마지막으로 블록, 리디렉션 (301, 302) 또는 금지 (403)없이 원본 페이지 만 표시 합니다. 다른 쓸모없는 매개 변수가있는 페이지처럼 작동해서는 안됩니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.