Обзор плагина Lockdown WP admin

Обзор плагина Lockdown WP Admin

Lockdown WP Admin


Плагин для WordPress “Lockdown WordPress Admin”
или кратко “Lockdown WP Admin” (Блокировка Администратора WordPress) предназначен для улучшения безопасности WordPress. Вы можете найти этот плагин в репозитории WordPress. Автор плагина – Син Фишер (Sean Fisher). Последняя из доступных на момент подготовки этого обзора версия – 1.6.
Давайте разберём шаг за шагом, что предлагает этот плагин администратору WordPress, чтобы сделать WordPress защищеннее и повысить его безопасность. К сожалению, автор не реализовал в данном плагине возможность перевода на другие языки. Поэтому привожу копии экрана в английском варианте.
1st, “Lockdown WP admin” скрывает каталог “wp-admin” от не вошедших в WordPress посетителей. Такой посетитель, не предъявивший WordPress имя и пароль зарегистрированного пользователя, в ответ на запрос любого файла из каталога “wp-admin” или просто “http://yourblogdomain/wp-admin/” получит HTTP ошибку 404 “страница не найдена”.
Чтобы активировать эту функцию, включите опцию “Yes, please hide WP Admin from the user when they aren’t logged in” (Да, пожалуйста, спрячьте каталог wp-admin от пользователя, пока он не вошёл в систему) на странице установок плагина, открываемой через пункт меню “Lockdown WP” в подменю “Lockdown WP” консоли администратора WordPress (обозначено стрелками на рисунке ниже). Я протестировал эту функцию на двух сайтах, использующих WordPress (локальном и удалённом, размещённом на разделяемом хостинге 1and1.com. В обоих случаях тесты прошли успешно. Заключение: эта полезная функция работает.
Настройка плагина Lockdown WP Admin

Настройка плагина Lockdown WP Admin


Второй способ входа в WordPress кроме уже обозначенного запроса к каталогу “wp-admin” – это ссылка на скрипт входа в WordPress по-умолчанию “wp-login.php”. So we came to the
2nd, “Lockdown WP admin” может изменить ссылку входа в WordPress, в результате ссылка будет выглятедь например так, http://yourblog/secretloginlink/ вместо стандартной http://yourblog/wp-login.php. Протестировано. Заключение: Эта функция также работает, как ожидается, на двух проверенных сайтах.
Две описанные выше полезные функции помогут вам защищить ваш блог от подбора паролей методом грубой силы (brute force attack).

Последняя функция, включенная в этот обзор – механизм HTTP аутентификации пользователей вашего блога. Интересная идея. Если включить эту функцию, выбрав опцию “WordPress Login Credentials” (имя и пароль пользователя WordPress), то вам не придётся настраивать вручную используемые Apache файлы .htaccess или .htpasswd и т.п. Благодаря этому плагину, сервер при НTTP аутентификации будет проверять имя и пароль пользователя WordPress. Хорошая, интересная идея, так как прямое использование механизма .htaccess, .htpasswd для включения HTTP аутентификации не применимо в случае доступ большого числа пользователей к консоли администратора (много авторов, редакторов и т.п.). Это очень трудоёмкая задача поддерживать вручную такую базу имен и паролей прямым редактированием настроечных файлов Apache.
Другой вариант – использовать для HTTP аутентификации отдельный список имен и паролей пользователей. Такой список может вести сам плагин. Список будет храниться в базе данных WordPress. Вы можете добавлять/удалять пользователей в такой список через пункт меню “Private users” в подменю “Lockdown WP”.

список пользователей консоли администратора

Lockdown WP список пользователей консоли администратора


Если с HTPP аутентификацией что-то вдруг пошло не так, и вы не можете войти на свой сайт, плагин предлагает возможность отключить эту опцию без удаления самого плагина. Для этого вам нужно лишь поместить в каталог плагина пустой файл с именем ‘disable_auth.txt’.

У меня при тестировании HTPP аутентификации возникли проблемы. Функция HTPP аутентификаци работала штатно на моём локальном тестовом сервере, но она не работала на тестовом сайте, размещённом на разделяемом хостинге 1and1.com. Кроме того, запрос на HTTP аутентификацию не перед отображением формы входа в WordPress с запросом логина и пароля, а уже после отправки запроса на вход с этой формы. То есть WordPress проверяет имя пользователя и пароль, сообщает вам или злоумышленнику являются ли имя пользователя и пароль верными, и только потом отображает запрос на HTPP аутентификацию. Таким образом, главная цель использования HTTP аутентификации – защита блога от атаки перебора паролей методом грубой силы – здесь не выполняется. Если злоумышленник получит верые имя и пароль пользователя WordPress с использованием программного бота, он может спокойно ввести их вручную в окно запроса данных для HTPP аутентификации.

Согасно изложенному выше я не рекомендую вам использовать функцию HTTP аутентификации, предлагаемую плагином “Lockdown WP admin”.

Код PHP – аккуратен, хорошо структурирован и снабжен подробными комментариями. Это – плюс. Большим минусом является то, что я, читая исходный код плагина, обнаружил выполняемую данным плагином “шпионскую” (spyware) функцию.
Внимание! Не чаще 1 раза в неделю, при изменении настроек плагина “Lockdown WP admin” отправляет критичную информацию на сервер автора плагина. Используемый адрес – http://labs.talkingwithsean.com/lockdown-api/main/send/
Взгляните на данные, отправляемые на внешний сервер:
[ld_admin_version] => 1.5
[server] => www.shinephp.my
[request_url] => /wp-admin/admin.php?page=lockdown-wp-admin
[wordpress_version] => 3.1.3
[url] => http://www.shinephp.my
[charset] => UTF-8
[login_base] => your-secret-login-directory-here
[ld_http_auth] => none
[ld_hide_wp_admin] => yep
[permalink_structure] => /%postname%
[server_software] => Apache/2.2.14 (Ubuntu)
[query_string] => page=lockdown-wp-admin
[wp_version] => 3.1.3

Их нельзя назвать анонимными. Здесь URL вашего сайта и название вашего секретного пути для входа в WordPress. Вот так секрет! Зачем автору плагина эти данные?
Я уверен, если автору плагина нужны подобные данные для отдладки или доработки плагина, он должен предоставить пользователю выбор, запросить его разрешение на отправку критичных данных внешнему серверу. Я не увидел, чтобы ‘Lockdown WP admin’ работал таким образом. Поэтому, если вы планируете использовать этот плагин, и вы не желаете, отправлять ваши данные на внешний сервер, вы должны закомментировать строки #505, 506, 507 в файле ‘lock-down-wp-admin.php’. Взгляните на приведеный ниже фрагмент кода и вам будет легче сориентироваться:

504
505
506
507
 // The stats
	$check_stats_sent = get_transient('ld_send_stats');
	if ( !$check_stats_sent )
	  $this->send_stats();

А здесь исходный код метода, который отправляет ваши данные на сервер автора плагина:

        /**
	 * Send stats
	 *
	 * Send anyomous stats to help out the development of the plugin.
	 * This should be pretty temporary.
	 * @access private
	**/
	public function send_stats()
	{
		global $wp_version;
 
		$to_post = array(
			'ld_admin_version'	=>	$this->ld_admin_version,
			'server'			=>	$_SERVER['HTTP_HOST'],
			'request_url'		=>	$_SERVER['REQUEST_URI'],
			'wordpress_version'	=>	$wp_version,
			'url'				=>	get_bloginfo( 'url' ),
			//	I reconsidered this..
			//	'admin_email'		=>	get_bloginfo('admin_email'),
			'charset'			=>	get_bloginfo('charset'),
			'login_base'		=>	$this->login_base,
			'ld_http_auth'		=>	get_option('ld_http_auth'),
			'ld_hide_wp_admin'	=>	get_option('ld_hide_wp_admin'),
			'permalink_structure'	=>	get_option('permalink_structure'),
			'server_software'		=> $_SERVER['SERVER_SOFTWARE'],
			'query_string'			=> $_SERVER['QUERY_STRING'],
			'wp_version'			=>	$wp_version,
		);
 
		if ( function_exists('got_mod_rewrite '))
			$to_post['got_mod_rewrite '] = got_mod_rewrite();
 
		$options = array(
			'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3),
			'body' => array( 'data' => serialize( $to_post ) ),
			'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
		);
 
		$raw_response = wp_remote_post('http://labs.talkingwithsean.com/lockdown-api/main/send/', $options);
 
		//	Set that we sent it
		set_transient('ld_send_stats', 'true', 604800);
 
		//	What'd they respond?
		if ( is_wp_error( $raw_response ) )
			return FALSE;
 
		if ( 200 != $raw_response['response']['code'] )
			return FALSE;
 
		$response = json_decode( unserialize( $raw_response['body'] ) );
 
		if ( !is_array( $response ) )
			return FALSE;
 
	}
}

Из приведённых выше комментариев в коде видно, что этот метод включен в плагин временно. Помните поговорку из нашей действительности “Нет ничего более постоянного, чем что-то временное”? В любом случае пользователь плагина должен быть поставлен в известность о подобной активности плагина. Данные должны отправляться только с его разрешения.

Вышеприведённый текст касается версии 1.6. Всего через три дня после публикации этой статьи Син Фишер (Sean Fisher), автор плагина, опубликовал версию 1.7, свободную от кода, отправляющего данные на внешний сайт. Я сравнил версии 1.6 и 1.7 программой Meld Diff Viewer и подтверждаю здесь, что в версии 1.7 метод send_stats() полностью исключён из кода плагина. Спасибо Сину за столь быструю публикацию очередной версии плагина, исправленного с учетом пожелания исключить код, содержащий spyware функциональность.

Tags:

  • Валера

    Настали времена это плагин не помогает уже

    • Можно чуть подробнее? Как обходят? Есть альтернатива этому решению?

  • VRS

    отлаживаю сайт на локалке.. ВП (3.4.1) установлен в подпапке, в настройках задано, чтобы домашняя страница отличалась от директории установки.
    поставила плагин.. первая функция работает, но вторая работает криво.
    плагин не делает самого важного! – не скрывает доступ к wp-login.php.
    Для меня это было самое главное.. А то остальное, что этот плагин делает
    можно записать несколькими строками в хтассесс. и не нагружать запросами
    к базе.

    • VRS

      ошиблась, вторая ВООБЩЕ не работает.. после ввода логина и пароля он пытается перекинуть на админку и не может из-за подпапки.. хрень в общем.. (((

  • Nadina

    А у меня не работает почему-то ссылка, которая устанавливается вместо wp-login.php. Она создается, но при попытке войти через нее, появляется ошибка 404. Все остальные функции отлично работают.

  • Полагаю, мой новый плагин позволит поднять планку безопасности вашего WordPress: http://wordpress.org/plugins/apache-password-protect/

  • Андрей

    Вот я случайно выбрал http аутентификацию как WordPress Credentials и после этого у меня форма выскакивает при заходе в админ панель. Логин и пароль чего я должен туда вписывать так как логин и пароль как я захожу в админ меня не пускает?