Могу ли я предотвратить перечисление имен пользователей?

Могу ли я предотвратить перечисление имен пользователей на моем сайте WordPress? В настоящее время я вижу пользователей с помощью инструмента WPScan.

31 голос | спросил urok93 22 MarpmThu, 22 Mar 2012 18:39:33 +04002012-03-22T18:39:33+04:0006 2012, 18:39:33

8 ответов


25

Простое решение, которое я использую в .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]
ответил fuxia 17 Jpm1000000pmFri, 17 Jan 2014 20:59:13 +040014 2014, 20:59:13
11

Вы не можете.

Средство WPScan - это автоматическая утилита, которая использует преимущества дружественных URL-адресов WordPress для определения имен пользователей. Пройдет через первый 10 возможных идентификаторов для авторов и проверить заголовок Location в ответе HTTP, чтобы найти имя пользователя.

Использование http://mysite.url например ...

WPScan проверит http://mysite.url/?author=1. Если ваш сайт использует довольно постоянные ссылки, он вернет 301 переадресацию с заголовком Location http://mysite.url/author/username. Если ваш сайт не использует довольно постоянные ссылки, он вернет статус 200 (OK) вместо этого, поэтому WPScan проверит канал для строки «posts by username» и извлечет имя пользователя. р>

Что вы можете сделать

Прежде всего, только потому, что кто-то может угадать ваше имя пользователя, это не значит, что ваш сайт небезопасен. И вы действительно не можете помешать кому-то разобрать ваш сайт таким образом.

Однако ...

Если вы действительно обеспокоены этим, я бы порекомендовал сделать две вещи:

  1. Отключите довольно постоянные ссылки. . Это заставит WPScan и подобные инструменты анализировать содержимое вашего сайта для имен пользователей, а не полагаться на URL.
  2. Заставлять пользователей устанавливать другой псевдоним. В отсутствие имени пользователя в URL-адресе инструменты сканирования будут искать «сообщения по имени пользователя» в контенте feed /post. Если вы не ставите имена пользователей там, то их нельзя нарезать.

Другой альтернативой является изменение авторских констант перезаписи. Есть несколько способов сделать это, и вы можете найти несколько на этом сайте, а также .

ответил EAMann 22 MarpmThu, 22 Mar 2012 19:41:45 +04002012-03-22T19:41:45+04:0007 2012, 19:41:45
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;
        }
    );
}

PS обратите внимание, что это уничтожит архивные архивы полностью , которые могут быть или не быть подходящим уровнем паранойи:)

ответил Rarst 18 Jpm1000000pmSat, 18 Jan 2014 13:38:33 +040014 2014, 13:38:33
3

Вы можете использовать правило перезаписи .htaccess, чтобы предотвратить это раскрытие, но вы также должны использовать псевдонимы, чтобы избежать раскрытия имен пользователей в анализируемом содержимом, как описано EAMann.

Следующий блог описывает, как это сделать, но имеет опечатку в правиле перезаписи: http: //www .question-defense.com /2012/03/20 /блок-WordPress-пользователь перечисление-безопасный-WordPress-против взлома

Правильное правило также должно удалить строку запроса из переписанного URL-адреса, иначе вы по-прежнему будете раскрывать имя пользователя. Он должен выглядеть следующим образом:

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

Хорошо работаем для нас.

ответил jptsetme 22 MaramFri, 22 Mar 2013 07:08:17 +04002013-03-22T07:08:17+04:0007 2013, 07:08:17
2

Я хотел добавить, что вы можете сделать это и на nginx. Проверка:
 » Блокировка перечисления пользователей WordPress на nginx - www.edwidget. имя

В качестве дополнительной заметки я хотел запретить перечисление имени пользователя на моем сайте, размещенном в 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

Et voila, ваши имена пользователей безопасны [r]!

ответил cfx 4 12013vEurope/Moscow11bEurope/MoscowMon, 04 Nov 2013 02:28:48 +0400 2013, 02:28:48
0

Я полностью заблокировал перечисление пользователей из WPScan, добавив следующее в 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]

Мое профессиональное мнение в качестве тестера проникновения для правительственного агентства ... ВСЕГДА стоит усложнять перечисление информации о вашем веб-сайте. Немногие из вас будут иметь веб-сайт, который поднимается над хакерами Google, сценаристами. Мы говорим о многоуровневой безопасности и с каждым слоем добавляем время и сложность для попытки проникновения. Каждый слой также добавляет набор навыков, необходимый для хакера. На WP есть несколько действительно хороших брандмауэров приложений. Посмотрите те, которые могут блокировать IP-адреса, которые повторяют попытки входа пользователя или 404. Идея заключается в том, чтобы ваш брандмауэр автоматически блокировал IP-адреса, которые сканировали ваш веб-сайт на страницах, которые не существуют, или пытайтесь повторно подписывать на свой сайт. Хорошая функция также включает возможности блокировки XSS и SQL Injection. Подумайте о том, как использовать все в одном WP Security из советов и советов HQ, Peter, Ruhul, Ivy. Он имеет достойный интерфейс и возможности для новичков и экспертов.

ответил Walter 15 AM000000120000004231 2015, 00:26:42
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();
}
ответил Ethan Jinks O'Sullivan 19 +03002016-10-19T21:43:42+03:00312016bEurope/MoscowWed, 19 Oct 2016 21:43:42 +0300 2016, 21:43:42
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
  • Когда он будет найден, он удалит переменную автора из валов запроса, чтобы он не был запрошен.

Если вы используете постоянные ссылки, это оставит архивы авторов в такт. Кроме того, если URL-адрес будет выглядеть примерно так: /dummy?author=1, это просто покажет страницу для /dummy.

Благодаря ответу Rarst на этот вопрос и https://perishablepress.com /стоп-пользователем перечисление-WordPress /

ответил leendertvb 8 FebruaryEurope/MoscowbWed, 08 Feb 2017 17:02:02 +0300000000pmWed, 08 Feb 2017 17:02:02 +030017 2017, 17:02:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132