在终极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,单击 "密码保护目录"图标。
点击后,会弹出一个窗口,询问目录位置。点击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网站安全策略和防护技术。
--阅读更多文章,请关注我的公众号:未定义变量