WordPress数据库是黑客最喜欢攻击的目标,许多人在安装WordPress时忘记更改数据库前缀,采用的是默认前缀wp_,这使黑客很容易进行大规模攻击。保护数据库的最机智的办法就是更改数据库表前缀。
如果你还没GreenGeeks等国外的wordpress托管主机会在创建站点时,会设置随机的表前缀,无需你再修改,不过以防万一你也可以按下文的方法在wp-config.php文件中确认一下表前缀;而如果你是在服务器(譬如Linode、阿里云)上自己搭建的网站,并且已经建好了,那么,请按照下文的方法修改数据库表前缀。
准备工作
请在操作之前备份你的网站数据库,并选择网站在线用户少的时间段,修改期间,最好将网站开启维护模式,如果网站用户很少,也可以不用开启维护模式,整个修改过程大约在10分钟以内。
更改wp-config.php文件中的表前缀
找到网站根目录中的wp-config.php文件并编辑它,在文件中找到下一段中所示的代码行,将其中的表前缀从wp_更改为自定义内容(由字母、数字和短下划线构成),譬如:a1b2c3_
$table_prefix = 'wp_';
修改后的示例:
$table_prefix = 'a1b2c3_';
更改所有数据库表的前缀名称
在网站的运维面板(譬如Cpanel、宝塔)中,找到database或数据库相关的栏目,进入数据库的管理面板,如果有phpMyAdmin功能入口,就使用phpMyAdmin访问你的数据库,然后按下面的步骤,将表前缀更改为我们刚才在wp-config.php文件中的新的表前缀
- 单击左侧菜单中的数据库名称以展开所有表。
- 在右侧,全选所有以wp_开头的表
- 单击with selected,在下拉菜单中选择replace table prefix。
- 在“From”字段中输入wp_,在“ To”字段中输入新的表前缀,在本示例中为a1b2c3。
- 单击continue进行更改,修改完成后刷新当前页面。
修改options表
请在左侧菜单中的搜索框内输入options并回车,找到options表,在本示例中,数据表名称为a1b2c3_options,我们需要找到本表的options_name一列中使用了wp_作为前缀的行,以便我们将其中的wp_替换成新的前缀,请点击页面中表格右上方的[edit line],然后将代码WHERE `option_name` LIKE ‘%wp_%’黏贴到已有的代码之后,如果按照本文示例,黏贴完成后将是如下效果,然后点击Go按钮执行搜索
SELECT * FROM `a1b2c3_options` WHERE `option_name` LIKE '%wp_%'
搜索后将看到一条记录,其中option_name是wp_user_roles,请双击对应单元格后修改,修改完成后将是 新前缀_user_roles,譬如本示例中是:a1b2c3_user_roles。
如果你的站点时wordpress多站点,你将可能不止1个option表,记得每个options表都需要修改。
修改UserMeta表
接下来,我们需要在usermeta中搜索所有使用wp_作为前缀的字段,因此我们可以替换它。为此,请使用以下SQL查询:
请在左侧菜单中的搜索框内输入usermeta并回车,找到usermeta表,在本示例中,数据表名称为a1b2c3_usermeta,我们需要找到本表的meta_key一列中使用了wp_作为前缀的行,以便我们将其中的wp_替换成新的前缀,请点击页面中表格右上方的[edit line],然后将代码WHERE `meta_key` LIKE ‘%wp_%’黏贴到已有的代码之后,如果按照本文示例,黏贴完成后将是如下效果,然后点击Go按钮执行搜索
SELECT * FROM `a1b2c3_usermeta` WHERE `meta_key` LIKE '%wp_%'
搜索后将看到多条记录,并且不同网站根据插件安装的不同而不同,请逐一将meta_key中的wp_前缀换为新前缀,但要注意的是,要仔细区别meta_key的含义,譬如:若你安装了wp rocket插件,则会看到一条包含wp_rocket的记录,则此处的wp_不需要修改。如果看到的是wp-而不是wp_,那么也不需要修改。
测试站点
至此,你可以测试网站了,使用新浏览器或无痕模式的浏览器,逐一打开网页前台和后台,进行多次访问和操作,如若正常,则说明修改成功。如若不正常,又无法界定问题所在,请先恢复数据库备份以及wp-config.php文件中的表前缀,确保网站可以访问,然后可以通过复制站点的方式去排查问题所在。
结语:我通过上文教程成功修改了多个网站,有简单的站点、也有复杂的站点,感谢如下教程给予我的帮助: