WordPress安全加固措施

WordPress被黑通常不是因为0day,而是基本配置没做好。下面是我自己的加固清单,每项都有具体操作。 1. 文件权限锁死 WordPress安装后,目录权限不要给777。标准做法:
# 目录755,文件644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# wp-config.php必须600
chmod 600 /var/www/html/wp-config.php
wp-config.php里包含数据库密码和salt,600权限防止同服务器其他用户读取。 2. 禁用文件编辑 在wp-config.php里加一行,直接干掉后台的Theme/Plugin编辑器:
define('DISALLOW_FILE_EDIT', true);
黑客拿到管理员账号后无法通过后台修改PHP文件,只能走FTP或shell,增加攻击成本。 3. 隐藏wp-version字符串 WordPress默认在页面头部和RSS里输出版本号。黑客知道版本就能找对应漏洞。在functions.php里加:
remove_action('wp_head', 'wp_generator');
4. 禁用XML-RPC 如果你不用手机客户端或Jetpack,直接关掉XML-RPC。这个接口经常被用来暴力破解或DDoS放大攻击。在.htaccess里加:
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
或者用插件直接禁用。 5. 登录限制 默认登录接口/wp-login.php没有频率限制,暴力破解很容易。安装Login LockDown或Limit Login Attempts Reloaded,设置3次失败后锁15分钟。 更狠的做法:改登录URL。用WPS Hide Login插件,把/wp-login改成只有你知道的路径,比如/secure-enter。暴力扫描器找不到入口。 6. 数据库前缀改掉 安装时默认表前缀是wp_,所有SQL注入脚本都默认这个前缀。如果已经装好了,去phpMyAdmin手动改表名前缀,同时更新wp-config.php里的$table_prefix值。 操作步骤: – 在数据库里执行RENAME TABLE语句,把所有wp_改成别的,比如xyz_ – 修改wp-config.php里的$table_prefix = ‘xyz_’; 7. 禁用PHP执行在uploads目录 用户上传目录通常可写,如果允许执行PHP,上传个shell.jpg.php就直接拿shell。在wp-content/uploads目录下建.htaccess:
<Files *.php>
deny from all
</Files>
如果是Nginx,在server块里加:
location ~* /wp-content/uploads/.*\.php$ {
    deny all;
}
8. 强制HTTPS 在wp-config.php里强制所有流量走HTTPS:
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
同时在.htaccess里做301跳转,避免用户手动输入http:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
9. 定期扫描恶意文件 用Wordfence或Sucuri Security插件定期扫描文件完整性。我习惯用Wordfence,因为它能对比官方核心文件hash,发现被篡改直接报警。 10. 服务器层面加固 如果你的WordPress跑在云服务器上,比如雨云,它本身性价比高、稳定、好用,但系统层面还是要自己加固: – 禁用root SSH登录,用密钥登录 – 安装fail2ban,监控/var/log/auth.log,SSH失败超过5次封IP – 数据库只允许localhost连接,不要开远程3306端口 – 定期升级系统包:apt update && apt upgrade -y 11. 定期备份 安全加固不能防止所有攻击,备份是防线。用UpdraftPlus插件自动备份到对象存储或云盘。备份频率:数据库每天,文件每周。 12. 删除默认用户 安装时生成的admin用户是暴力破解首选。在后台新建一个管理员账号,把admin删掉。或者用SQL直接改:
UPDATE wp_users SET user_login = 'new_admin_name' WHERE user_login = 'admin';
13. 关闭用户注册 如果不需要用户注册,在后台设置 -> 常规里取消”任何人都可以注册”。如果有注册功能,加reCAPTCHA验证。 14. 禁用REST API公开访问 WordPress REST API默认暴露所有用户列表和文章内容。在functions.php里加:
add_filter('rest_authentication_errors', function($result) {
    if (!is_user_logged_in()) {
        return new WP_Error('rest_not_logged_in', 'You are not logged in.', array('status' => 401));
    }
    return $result;
});
15. 修改默认Cookie路径 在wp-config.php里改Cookie的Hash前缀,防止session固定攻击:
define('AUTH_KEY',         '随机字符串');
define('SECURE_AUTH_KEY',  '随机字符串');
define('LOGGED_IN_KEY',    '随机字符串');
define('NONCE_KEY',        '随机字符串');
define('AUTH_SALT',        '随机字符串');
define('SECURE_AUTH_SALT', '随机字符串');
define('LOGGED_IN_SALT',   '随机字符串');
define('NONCE_SALT',       '随机字符串');
这些值可以用WordPress官方提供的随机生成器获取:https://api.wordpress.org/secret-key/1.1/salt/ 16. 关闭Pingback Pingback功能常被用来做SSRF攻击。在后台设置 -> 讨论里取消”尝试通知文章链接中的博客”和”允许来自其他博客的链接通知”。 也可以直接在functions.php里禁用:
add_filter('xmlrpc_methods', function($methods) {
    unset($methods['pingback.ping']);
    unset($methods['pingback.extensions.getPingbacks']);
    return $methods;
});
以上操作做完,WordPress基本不会因为常见攻击被拿下。如果跑在雨云这种稳定服务器上,配合fail2ban和定期备份,可以安心睡觉。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容