文件与数据安全篇 – WordPress 网站安全指南

文件与数据安全篇 – WordPress 网站安全指南

一个 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-contentwp-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 数据库:它才是网站的一切。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容