WordPress 安全加固防护教程

WordPress 作为全球使用量最大的 CMS,也是黑客攻击的主要目标。暴力破解、SQL 注入、跨站脚本、恶意文件上传等攻击手段层出不穷。在搬瓦工 VPS 上运行 WordPress,你拥有服务器的完全控制权,可以从系统层面到应用层面实施全方位的安全加固。本文将介绍经过实战验证的安全防护措施。

一、登录安全加固

1.1 修改默认登录地址

WordPress 默认登录地址 /wp-login.php/wp-admin/ 是攻击者的首要目标。在 Nginx 中限制访问:

# 在 Nginx 站点配置中添加
# 通过自定义参数访问登录页
location = /wp-login.php {
    # 只允许特定 IP 访问
    # allow 你的IP地址;
    # deny all;

    # 或者通过 HTTP Basic Auth 添加额外认证层
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;

    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

创建 HTTP Basic Auth 密码文件:

apt install apache2-utils -y
htpasswd -c /etc/nginx/.htpasswd admin
# 按提示输入密码

1.2 限制登录尝试次数

使用 Nginx 的 limit_req 模块防止暴力破解:

# 在 http 块中定义限流区域
limit_req_zone $binary_remote_addr zone=wp_login:10m rate=1r/s;

# 在 server 块中应用限流
location = /wp-login.php {
    limit_req zone=wp_login burst=3 nodelay;
    limit_req_status 429;

    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

1.3 强制使用强密码和双因素认证

在 wp-config.php 中强制所有用户使用强密码策略:

// 在 functions.php 中添加密码强度检查
function enforce_strong_password($errors, $update, $user) {
    if ($update) return $errors;
    $password = isset($_POST['pass1']) ? $_POST['pass1'] : '';
    if (strlen($password) < 12) {
        $errors->add('password_too_short', '密码长度至少需要12个字符');
    }
    if (!preg_match('/[A-Z]/', $password) || !preg_match('/[0-9]/', $password) || !preg_match('/[^A-Za-z0-9]/', $password)) {
        $errors->add('password_too_weak', '密码必须包含大写字母、数字和特殊字符');
    }
    return $errors;
}
add_action('user_profile_update_errors', 'enforce_strong_password', 10, 3);

1.4 禁用 XML-RPC

XML-RPC 是暴力破解的常见入口,如果不使用远程发布功能,建议完全禁用:

# 在 Nginx 中直接拦截
location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
    return 444;
}

二、文件系统安全

2.1 设置正确的文件权限

# 设置目录权限为 755
find /var/www/html -type d -exec chmod 755 {} \;

# 设置文件权限为 644
find /var/www/html -type f -exec chmod 644 {} \;

# wp-config.php 设置更严格的权限
chmod 600 /var/www/html/wp-config.php

# 设置正确的文件所有者
chown -R www-data:www-data /var/www/html

2.2 禁止直接访问敏感文件

# 在 Nginx 配置中添加
# 禁止访问 .htaccess 和隐藏文件
location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

# 禁止访问 wp-config.php
location = /wp-config.php {
    deny all;
}

# 禁止访问 readme.html 和 license.txt(泄露版本信息)
location ~* (readme\.html|license\.txt)$ {
    deny all;
}

# 禁止在 uploads 目录执行 PHP
location ~* /wp-content/uploads/.*\.php$ {
    deny all;
}

2.3 禁用文件编辑器

WordPress 后台自带的主题和插件编辑器是严重的安全隐患,在 wp-config.php 中禁用:

define('DISALLOW_FILE_EDIT', true);
// 如果想同时禁止后台安装/更新主题插件
// define('DISALLOW_FILE_MODS', true);

三、数据库安全

3.1 修改数据库表前缀

安装时就应该将默认的 wp_ 前缀改为自定义前缀。如果已经安装,可以使用以下步骤修改(操作前务必备份数据库):

# 备份数据库
wp db export backup.sql --allow-root

# 使用 WP-CLI 或 SQL 修改表前缀
# 1. 修改 wp-config.php 中的 $table_prefix
# 2. 重命名所有数据库表
# 3. 更新 options 和 usermeta 表中的引用

3.2 数据库用户权限最小化

# 为 WordPress 创建专用数据库用户,只授予必要权限
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '强密码';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;

3.3 更新安全密钥

WordPress 使用安全密钥加密 Cookie 和会话数据。定期更新密钥可以使所有已登录的会话失效:

# 使用 WP-CLI 生成新的安全密钥
wp config shuffle-salts --allow-root

四、Nginx 安全头部配置

# 在 server 块中添加安全响应头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

# Content Security Policy(根据实际情况调整)
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;" always;

# HSTS(确保 SSL 证书已配置好再启用)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

五、防火墙与入侵检测

5.1 配置 UFW 防火墙

# 设置默认规则
ufw default deny incoming
ufw default allow outgoing

# 允许 SSH
ufw allow 22/tcp

# 允许 HTTP 和 HTTPS
ufw allow 80/tcp
ufw allow 443/tcp

# 启用防火墙
ufw enable

# 查看规则
ufw status verbose

5.2 安装 Fail2Ban 防暴力破解

apt install fail2ban -y

创建 WordPress 专用的 Fail2Ban 过滤器:

# 创建 /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^ .* "POST /wp-login\.php
            ^ .* "POST /xmlrpc\.php
ignoreregex =

创建 Jail 配置:

# 创建 /etc/fail2ban/jail.local
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 300
bantime = 3600

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
systemctl restart fail2ban
fail2ban-client status wordpress

六、SSL/TLS 安全配置

使用 Let's Encrypt 免费证书并配置强加密参数:

# 安装 Certbot
apt install certbot python3-certbot-nginx -y

# 获取证书
certbot --nginx -d your-domain.com -d www.your-domain.com

在 Nginx 中强化 SSL 配置:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;

七、定期安全审查

创建安全检查脚本并定期执行:

#!/bin/bash
# security-check.sh

echo "=== WordPress 安全检查 ==="
echo ""

# 检查文件权限
echo "[检查] wp-config.php 权限:"
stat -c %a /var/www/html/wp-config.php

# 检查是否有可疑的 PHP 文件在 uploads 目录
echo "[检查] uploads 目录中的 PHP 文件:"
find /var/www/html/wp-content/uploads -name "*.php" -type f

# 检查核心文件完整性
echo "[检查] WordPress 核心文件完整性:"
cd /var/www/html && wp core verify-checksums --allow-root

# 检查需要更新的插件
echo "[检查] 需要更新的插件:"
cd /var/www/html && wp plugin list --update=available --allow-root

echo "=== 检查完成 ==="
chmod +x /root/security-check.sh
# 每周执行一次
echo "0 4 * * 1 /root/security-check.sh >> /var/log/wp-security.log 2>&1" | crontab -

总结

WordPress 安全加固需要多层防护:登录保护、文件权限、数据库安全、安全头部、防火墙、SSL 加密,每一层都不可或缺。在搬瓦工 VPS 上,你可以在服务器层面实施这些安全措施,比依赖共享主机的安全策略更加可靠。建议定期执行安全审查,保持 WordPress 核心和插件的更新。配合 自动备份方案,即使遭遇攻击也能快速恢复。更多 WordPress 相关教程请参考 速度优化指南插件配置指南。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 进入官网购买。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。