一个 WordPress 站点或者说任何其它类型的网站通常会包括文件与数据库,那么在安全防范方面它们也是重点保护的对象。如何确保网站的文件与数据不被篡改、剽窃及禁止未经授权的访问等问题是本篇将介绍的重点内容。
正确保护网站目录与文件的安全
WordPress 的目录与文件结构及权限设置
WordPress 根目录下默认有三个目录与一些文件,文件清单如下:
index.php
license.txt
readme.html
robots.txt
wp-activate.php
wp-blog-header.php
wp-comments-post.php
wp-config.php
wp-config-sample.php
wp-cron.php
wp-login.php
wp-load.php
wp-mail.php
wp-settings.php
wp-signup.php
wp-trackback.php
xmlrpc.php
wp-links-opml.php
这些文件中,wp-config.php 通常是需要重点保护的对象,因为它记录了网站的一些关键配置信息,包括数据库的连接信息(含密码)。如果该文件被篡改或窃取内容,那后果是相当严重的。
因此,一般建议将它的权限设置成 440 ,也就是仅文件所有者、所在用户组可读,其他用户没有任何权限,既不可读也不可写。
chmod 440 wp-config.php
这里需要注意的是,个别插件在首次启用的时候需要对 wp-config.php 文件写入代码,例如 WP Rocket 会写入启用缓存的指令,安装启用此类插件时可以将权限改为 640 ,安装设置完毕后再将权限改回。
chmod 640 wp-config.php
WordPress 默认的三个重要子目录是 wp-content
, wp-admin
和 wp-includes
。
- wp-content 目录:包含了主题、插件以及上传的媒体文件等,该目录必须让所有者拥有可写入的权限,否则会导致安装主题活插件、上传图片等操作失败。
- wp-admin 目录: WordPress 的管理后台目录。
- wp-includes 目录:包含了 WordPress 核心函数库和其他必要的文件。
推荐将这三个目录及子目录的权限设置成 755,目录下的所有文件权限设置成 644。具体的设置方法可参考:WordPress 文件权限设置指南及操作技巧。
禁止部分关键文件被访问
通过对目录与文件的权限设置可以避免一些基础安全问题,但这还远远不够。可以通过 Web 服务器的设置或 WAF 防火墙禁止 WordPress 的一些关键文件被访问,这样不但可以保护 WordPress 安全,还能有效防范攻击者发送大量的无效请求,消耗服务器资源导致站点变慢或不可用。
如 /wp-content/plugins/ 与 /wp-content/themes/ 目录下的 PHP 文件仅需在后台通过 /wp-admin/ URL 调用,而无需直接访问执行等。
Nginx Web 服务器禁止部分关键文件被访问的配置示例:
server {
# ... 其他配置 ...
# 禁止访问指定路径和文件
location ~* ^/(wp-config\.php|xmlrpc\.php|wp-settings\.php)$ {
deny all;
}
# 禁止访问插件和主题目录中的.php文件
location ~* ^/wp-content/plugins/.+\.php$ {
deny all;
}
location ~* ^/wp-content/themes/.+\.php$ {
deny all;
}
# 禁止访问/wp-admin/includes/下的.php文件
location ~* ^/wp-admin/includes/.+\.php$ {
deny all;
}
# 禁止访问/wp-includes/下的.php文件
location ~* ^/wp-includes/.+\.php$ {
deny all;
}
# 禁止访问指定文件扩展名
location ~* \.(rar|zip|tar|gz|7z)$ {
deny all;
}
}
保护 WordPress 数据安全
MySql 数据库安全
保障 MySQL 数据库的安全是一个多层次的过程,涉及从物理安全到网络配置、用户权限管理以及应用层的综合措施。
于大多数网站而言,不需要这么麻烦,只需要将 MySQL 使用的 3306 端口配置正确的权限就可高枕无忧。
如果网站与 MySQL 数据库在同一个服务器,则将服务器的 3306 端口的外网连接权限关闭即可。一般的云服务器提供商都会提供相应的网络防火墙设置功能。亦可以在 iptables 或 firewalld 等操作系统的防火墙中设置。
如果网站与 MySQL 数据库不是同一个服务器,则建议通过内网连接,将 MySql 服务器的 3306 端口仅开放需要连接的内网 IP 的访问权限。
通过以上方式处理后,即使网站的数据库连接信息被泄露,攻击者也无法连接登录 MySQL 数据库。
数据安全
通过限制 MySQL 数据库服务器的访问权限,可以阻挡绝大部分的外部攻击。但这并不意味着网站数据是绝对安全的,因为很多风险往往来自“内部”,例如:误操作、使用了有风险的程序代码或一些其它不可预见的风险。
为了保障数据安全,最好的方式就是定期备份,推荐使用专为 WordPress 而设计的 UpdraftPlus Premium、All-in-One WP Migration 或 Duplicator Pro 等专业的数据备份插件。
有关于 WordPress 数据库安全防范的更多信息推荐查看:保护 WordPress 数据库:它才是网站的一切。
暂无评论内容