Здравствуйте, уважаемые читатели и посетители блога 4remind.ru. Многие знают, что нередко случаются взломы блогов и сайтов на движке WordPress. Одна из причин происходящего кроется в массовом применении начинающими вебмастерами настроек блога WordPress по умолчанию, например использование одного и того же префикса таблиц базы данных WordPress. В этой статье речь пойдет о методе замены всем известного префикса «wp_» на более надежный, который труднее будет угадать и подобрать злоумышленникам.
Я распишу все по шагам, которые сам проделывал для замены префикса таблиц в базе данных своего блога и блогов знакомых. Так что все проверено на личном опыте. Последняя проверка производилась на WordPress 3.3.1.
Итак, друзья, приступим к аккуратной замене префикса таблиц базы данных WordPress.
Этап №1 — Бэкап базы данных
Для начала необходимо обязательно сделать бэкап текущей Базы Данных и сохранить его в надежном месте!!!
Идем дальше... Предположим, что мы собираемся заменить установленный по умолчанию префикс таблиц «wp_» на новый, более надежный, поэтому далее в тексте будут использоваться следующие условные обозначения:
«wp_» — старый префикс таблиц базы данных WordPress;
«NEWPREF_» — новый префикс таблиц базы данных WordPress;
Не забывайте, что в приведенных ниже кодах вам необходимо заменить все вхождения этих условных обозначений на ваши собственные.
Этап №2 — Создание таблиц базы данных с новым префиксом
Приступим к процедуре замены префикса таблиц базы данных используя phpMyAdmin.
Начнем создавать новые таблицы. Заодно в новые таблицы сразу будут копироваться данные из старых (текущих) таблиц. Блог в это время будет работать, как и работал, так как мы пока не вмешиваемся в таблицы, используемые блогом на данный момент.
Забегая вперед скажу, что конечно можно было бы на этом шаге взяться за банальное переименование существующих таблиц, чтобы сменить префикс у них, например с помощью запросов типа
RENAME TABLE OLDPREFIX_table TO NEWPREFIX_table
но мы все сделаем другим, более аккуратным и «щадящим» способом. Ведь если к примеру малоопытный вебмастер будет переименовывать каждую таблицу вручную, то это может занять много времени, а тем временем блог не будет работать, то есть будет недоступен для посетителей.
Создаем список SQL-запросов, в которых должны быть перечислены практически все таблицы, которые используются в базе данных вашего блога, включая таблицы, созданные плагинами (если таковые конечно имеются). В этом списке после слова «TABLE» вставляются имена таблиц с новым префиксом, а после слова «FROM» вставляются имена таблиц со старым префиксом.
CREATE TABLE NEWPREF_blc_filters SELECT * FROM wp_blc_filters; CREATE TABLE NEWPREF_blc_instances SELECT * FROM wp_blc_instances; CREATE TABLE NEWPREF_blc_links SELECT * FROM wp_blc_links; CREATE TABLE NEWPREF_blc_synch SELECT * FROM wp_blc_synch; CREATE TABLE NEWPREF_commentmeta SELECT * FROM wp_commentmeta; CREATE TABLE NEWPREF_comments SELECT * FROM wp_comments; CREATE TABLE NEWPREF_links SELECT * FROM wp_links; CREATE TABLE NEWPREF_options SELECT * FROM wp_options; CREATE TABLE NEWPREF_postmeta SELECT * FROM wp_postmeta; CREATE TABLE NEWPREF_posts SELECT * FROM wp_posts; CREATE TABLE NEWPREF_terms SELECT * FROM wp_terms; CREATE TABLE NEWPREF_term_relationships SELECT * FROM wp_term_relationships; CREATE TABLE NEWPREF_term_taxonomy SELECT * FROM wp_term_taxonomy; CREATE TABLE NEWPREF_usermeta SELECT * FROM wp_usermeta; CREATE TABLE NEWPREF_users SELECT * FROM wp_users;
Теперь заходим в phpMyAdmin, снова выбираем нужную нам базу данных и переходим на закладку «SQL». Вставляем в поле для выполнения SQL-запросов приготовленный нами список запросов и выполняем их.
Можно в принципе запросы выполнять и по одному, по очереди, если есть желание.
После выполнения запросов вы получите примерно такой отчет:
Этап №3 — Замена упоминаний префикса в записях таблиц
Идем дальше. Теперь нам обязательно нужно в некоторых полях из двух новых созданных таблиц заменить упоминание старого префикса на новый. Это таблицы «NEWPREF_options» и «NEWPREF_usermeta».
В таблице с новым префиксом «NEWPREF_options» в поле «option_name>» понадобится заменить значение
«wp_user_roles» на «NEWPREF_user_roles»
В таблице с новым префиксом «NEWPREF_usermeta» нужно заменить все значения поля «meta_key», у которых в начале есть старый префикс.
Это могут быть следующие значения:
- wp_user_level
- wp_user-settings-time
- wp_user-settings
- wp_capabilities
- wp_dashboard_quick_press_last_post_id
- wp_autosave_draft_ids
- wp_metaboxorder_post
- wp_usersettings
- wp_usersettingstime
Конечно не все из выше перечисленных значений могут быть у вас в таблице «NEWPREF_usermeta». Все зависит от конфигурации и версии движка вашего блога.
Но мы все же для подстраховки проверим и заменим все найденные значения, это не помешает.
Для замены вышеупомянутых значений на новые в phpMyAdmin снова выбираем нужную нам базу данных и переходим на закладку «SQL».
Вводим там и выполняем следующие команды:
UPDATE NEWPREF_options SET option_name = 'NEWPREF_user_roles' WHERE option_name = 'wp_user_roles'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_user_level' WHERE meta_key = 'wp_user_level'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_user-settings-time' WHERE meta_key = 'wp_user-settings-time'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_user-settings' WHERE meta_key = 'wp_user-settings'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_capabilities' WHERE meta_key = 'wp_capabilities'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_dashboard_quick_press_last_post_id' WHERE meta_key = 'wp_dashboard_quick_press_last_post_id'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_autosave_draft_ids' WHERE meta_key = 'wp_autosave_draft_ids'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_metaboxorder_post' WHERE meta_key = 'wp_metaboxorder_post'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_usersettings' WHERE meta_key = 'wp_usersettings'; UPDATE NEWPREF_usermeta SET meta_key = 'NEWPREF_usersettingstime' WHERE meta_key = 'wp_usersettingstime';
После выполнения запросов вы получите примерно такой отчет:
Этап №4 — Замена префикса в файле wp-config.php
Теперь, когда в таблицах базы данных WordPress все замены произведены, заходим в файл wp-config.php, который находится в корневом каталоге блога, находим там строку
$table_prefix = 'wp_';
и заменяем в ней префикс на новый
$table_prefix = 'NEWPREF_';
Этап №5 — Проверка блога после замены префикса
Теперь запусаем браузер, открываем свой блог и проверяем, что админ без проблем входит в панель управления и там все работает.
Проверяем работоспособность всего блога.
Этап №6 — Проверка блога после удаления старых таблиц
Если на Этапе №5 все было в порядке, то снова заходим в phpMyAdmin, выбираем нужную нам базу и теперь уже можно удалить все таблицы со старым префиксом.
Напоследок еще раз для подстраховки выполняем проверку, как на Этапе №5. И если обнаружится какая-то проблема, то придется восстановить из бэкапа таблицы со старым префиксом и вернуть на место прежнее значение префикса в конфигурационном файле wp-config.php ( строка $table_prefix = 'wp_'; ), который находится в корневом каталоге блога.
Удачной Вам замены префиксов таблиц базы данных WordPress.
Метки: WordPress, база данных, безопасность, префикс
А не проще будет открыть файл базы данных в AkelPad и заменить wp_ на NEWPREF_ ?
Можно и так конечно, для тех, кто знает что делает.
Но мне уже приходилось помогать реанимировать БД, отредактированные в стандартном Notepad.exe и потом импортированные обратно. Основная ошибка у многих новичков в том, что они не обращают внимание на кодировку символов, которая выставлена в настройках БД, к примеру сохраняют в ANSI и заливают в БД, которая настроена под UTF-8, а потом у них либо что-то не работает, либо нечитаемые тексты на выходе.
Огромное спасибо! ))) Я сразу поставил в AkelPad кодировку по умолчанию -UTF-8
спасибо за статью,
после самостоятельной смены префикса возникли проблемы — было не войти в админку. сделал по вашей инструкции — работает.