WordPress — еще немного о безопасности сайта: что обычно упускается из виду
Ранее мы уже не один раз обсуждали возможные способы защиты сайта:
- Защищаем блог от взлома
- Как защитить блог от взлома
- Проверка сайта (шаблона) на вирусы
- Базы данных — сохраняем, улучшаем и защищаем
- WordPress Firewall 2 и TAC — плагины, которые защищают блог от атак и нежелательного кода в файлах темы
- Полезная тройка плагинов: проверка и защита
Сегодня же мы попробуем устранить еще пару брешей в наших сайтах, которые красноречиво приглашают злоумышленников попасть внутрь админ-панели и делают файлы нашего сайта уязвимыми.
1. Вход в админ-панель.
а). Что из себя представляет вход в админку: поля для ввода логина и пароля. Все бы хорошо, но WordPress по умолчанию, высвечивает ошибку, допущенную при вводе данных. Если Вы ввели верное имя, но неверный пароль, то движок об этом оповестит
если же ситуация обратная, то он укажет, что введен неверный логин
Таким образом, данный функционал является подсказкой для того, кто пытается войти в админ-панель, что нам совсем ни к чему.
Чтобы устранить это «недоразумение» можно пойти простым путем — открываем wp-login.php и комментируем строки (приблизительно 126-129):
1 2 3 4 |
if ( !empty($errors) ) echo '<div id="login_error">' . apply_filters('login_errors', $errors) . "</div>\n"; if ( !empty($messages) ) echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n"; |
Теперь при попытке входа в админку с неверными данными, движок не будет оповещать о том, что именно введено неверно.
б). Думаю, всем известно, хранить пароли в браузерах — дело неблагодарное и неразумное. Вот по этой причине чекбокс «Запомнить меня» нам совершенно не нужен. Скрыть его можно в том же wp-login.php, приблизительно строки 675-677:
1 2 3 |
if ( isset($_POST['log']) ) $user_login = ( 'incorrect_password' == $errors->get_error_code() || 'empty_password' == $errors->get_error_code() ) ? esc_attr(stripslashes($_POST['log'])) : ''; $rememberme = ! empty( $_POST['rememberme'] ); |
и строку 690:
1 |
<p><label for="rememberme"><input name="rememberme" type="checkbox" id="rememberme" value="forever" <?php checked( $rememberme ); ?> /> <?php esc_attr_e('Remember Me'); ?></label></p> |
в). «Забыли пароль?» Этот вопрос стоит удалить прежде всего, так как если Вам потребуется восстановить пароль от админ-панели Вы, как владелец хостинг-аккаунта, сможете восстановить пароль через phpmyadmin своего хостинга, а давать всяческие подсказки кому попало уж точно не стоит.
Возвращаемся к wp-login.php, находим строки (приблизительно с 705 по 715) и комментируем их:
1 2 3 4 5 6 7 8 9 10 11 |
<?php if ( !$interim_login ) { ?> <p id="nav"> <?php if ( isset($_GET['checkemail']) && in_array( $_GET['checkemail'], array('confirm', 'newpass') ) ) : ?> <?php elseif ( get_option('users_can_register') ) : ?> <a href="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login' ) ); ?>"><?php _e( 'Register' ); ?></a> | <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ); ?>"><?php _e( 'Lost your password?' ); ?></a> <?php else : ?> <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ); ?>"><?php _e( 'Lost your password?' ); ?></a> <?php endif; ?> </p> <?php } ?> |
После всех действий, совершенных нами, вход в админку имеет вот такой вид:

2. Встроенный редактор в админ-панели.

На первый взгляд, удобное решение, созданное разработчиками WordPress — возможность правки файлов темы и плагинов из админ-панели. Но, если взглянуть на это с другой стороны, то видишь совсем иную картину: админка уязвима, соответственно и все файлы также уязвимы, ведь они открыты для редактирования. Что уж говорить о банальных ошибках, которые можно допустить в коде, а кнопки «отменить» в данном редакторе нет. Так что плюсы и минусы налицо. Используя FTP-редактор можно избежать непоправимых ошибок и держать свои файлы при себе.
Для того, чтобы скрыть редактор, открываем wp-includes/functions.php и добавляем строку:
1 |
define('DISALLOW_FILE_EDIT', true); |
Вот таким образом мы исправили несколько явных уязвимостей в наших сайтах.
Если у Вас имеются другие идеи по улучшению безопасности сайта, можете поделиться информацией в комментариях.