WordPress安全指南 -- 进阶篇

在终极WordPress安全指南 -- 2021年版这篇文章中,我介绍了目前WordPress网站上线前的一些安全防护策略。由于篇幅显示,有一些防护技术没有详细介绍。因此,这篇文章将主要介绍其中三个防护策略:

-如何在特定的WordPress目录中禁止PHP的执行?
-如何更改WordPress数据库前缀,提高安全性?
-如何保护你的WordPress管理员(wp-admin)目录?

1. 如何在特定的WordPress目录中禁止PHP的执行?

默认情况下,WordPress使某些目录是可以写入的,这样我们网站上的其他授权用户就可以轻松地将主题、插件、图片和视频上传到网站。

然而这个功能很可能会被他人滥用,比如黑客可以利用它上传后门访问文件或恶意软件到您的网站。

这些恶意文件通常被伪装成WordPress的核心文件。它们大多是用PHP编写的,可以在后台运行,以盗取或者破坏我们的网站。

因此,我们需要在某些目录中禁止执行PHP文件。那让我们来看看如何做到这点吧。

大多数WordPress网站的根目录下都有一个.htaccess文件。这是一个强大的配置文件,用于密码保护管理区,禁止目录浏览,生成SEO友好的URL结构等。

默认情况下,.htaccess文件位于我们的WordPress网站的根目录下,但我们也可以在WordPress内部目录中创建和使用它。

为了保护您的网站免受黑客攻击,我们需要创建一个.htaccess文件,并将其上传到您网站的/wp-includes/和/wp-content/uploads/目录中。

我们需要用记事本或者任何IDE创建一个新文件,添加下列代码,并保存文件且命名为.htaccess即可。


deny from all

然后我们可以将这个.htaccess文件上传到服务器网站/wp-includes/和/wp-content/uploads/目录中即可。

2. 如何更改WordPress数据库前缀,提高安全性?

WordPress数据库存储着网站的所有信息,因此它是黑客最喜欢的目标。垃圾邮件和黑客都会运行自动代码进行SQL注入。很多人在安装WordPress的时候忘记了更改数据库的前缀。这使得黑客更容易通过针对默认的前缀wp_来策划大规模攻击。保护数据库最聪明的方法就是更改数据库前缀,而且很容易做到。但要为您建立的网站正确地更改WordPress数据库前缀,而不至于把它完全搞乱,这需要几个步骤。

在修改数据库前缀之前,请一定要先备份我们的数据库。

打开位于WordPress根目录下的wp-config.php文件。把表前缀从wp_改成像这样的wp_a123456_。

   $table_prefix  = 'wp_a123456_';

然后,我们需要进入网站数据库,修改数据库表名。执行如下SQL。

RENAME table `wp_commentmeta` TO `wp_a123456_commentmeta`;
RENAME table `wp_comments` TO `wp_a123456_comments`;
RENAME table `wp_links` TO `wp_a123456_links`;
RENAME table `wp_options` TO `wp_a123456_options`;
RENAME table `wp_postmeta` TO `wp_a123456_postmeta`;
RENAME table `wp_posts` TO `wp_a123456_posts`;
RENAME table `wp_terms` TO `wp_a123456_terms`;
RENAME table `wp_termmeta` TO `wp_a123456_termmeta`;
RENAME table `wp_term_relationships` TO `wp_a123456_term_relationships`;
RENAME table `wp_term_taxonomy` TO `wp_a123456_term_taxonomy`;
RENAME table `wp_usermeta` TO `wp_a123456_usermeta`;
RENAME table `wp_users` TO `wp_a123456_users`;

最后,我们需要搜索options表中任何其他使用wp_作为前缀的字段,并替换成我们的新前缀。

SELECT * FROM `wp_a123456_options` WHERE `option_name` LIKE '%wp_%';

同样,我们还需搜索usermeta表中任何其他使用wp_作为前缀的字段,并替换成我们的新前缀。

SELECT * FROM `wp_a123456_usermeta` WHERE `meta_key` LIKE '%wp_%';

到这里,我们的替换前缀工作就完成了。

3. 如何保护你的WordPress管理员(wp-admin)目录?

当你看到标题的时候,你可能会想,wp-admin目录不是已经有密码保护了吗。但为了增加额外的安全层,大量WordPress的网站往往会增加额外的一层认证。

3.1 cPanel方法

如果我们的WordPress网站使用cPanel,我们可以进行如下操作。

登录我们的cPanel,单击 "密码保护目录"图标。

WordPress"密码保护目录"图标

点击后,会弹出一个窗口,询问目录位置。点击web根目录即可。一旦你在那里,导航到你的WordPress所在的文件夹。然后点击/wp-admin/文件夹。你会看到这样的界面。

安全设置

只需勾选密码保护目录的方框。然后为该目录创建一个用户。现在,当你尝试访问你的wp-admin目录时,你应该会看到一个像这样的认证要求框。

认证要求框

3.2. 手动方法

如果我们网站没有使用cPanel,我们可以手动创建这个功能。

首先创建一个.htpasswds文件。你可以通过这个生成器轻松完成。把这个文件上传到你的/public_html/目录外。一个好的路径是

home/user/.htpasswds/public_html/wp-admin/passwd/。

然后,创建一个.htaccess文件并上传到/wp-admin/目录下。然后在其中添加以下代码。

AuthName "Admins Only"
AuthUserFile /home/yourdirectory/.htpasswds/public_html/wp-admin/passwd
AuthGroupFile /dev/null
AuthType basic
require user putyourusernamehere

最后,不要忘记替换你的用户名和密码。

3.3. 修复404 error或Too many redirect error

在执行以上配置后,有些网站会出现404或者too many redirect错误,这取决于服务器是如何配置的。要解决这个问题,请打开您的WordPress主文件.htaccess,并在WordPress规则开始前添加以下代码。

ErrorDocument 401 default

此外,上述操作还可能会破坏前端的Ajax功能(如果我们在前端使用了Ajax)。我们可以使用如下方法解决。

打开位于/wp-admin/文件夹中的.htaccess文件(这不是我们上面编辑的主.htaccess文件)。

在wp-admin .htaccess文件中,粘贴以下代码。


    Order allow,deny
    Allow from all
    Satisfy any 

这样我们就可以正常使用Ajax了。

自WordPress诞生以来,针对WordPress的攻击就一直存在。我会在今后的继续分享最新的WordPress网站安全策略和防护技术。

--阅读更多文章,请关注我的公众号:未定义变量

你可能感兴趣的:(WordPress安全指南 -- 进阶篇)