WordPress 安全基础
安全原则
核心安全原则
- 最小权限原则 - 只授予必要的权限
- 深度防御 - 多层安全防护
- 及时更新 - 保持核心、主题、插件最新
- 安全编码 - 所有输入验证、输出转义
用户安全
强密码策略
php
// 在 wp-config.php 中强制强密码
define('WP强制强密码', true);
// 或使用密码强度插件
// 推荐:WPS Hide Login, Login LockDown密码建议
- 至少 12 位字符
- 包含大小写字母、数字、特殊符号
- 不要使用常见单词
- 不同网站使用不同密码
用户角色权限
| 角色 | 权限说明 | 使用场景 |
|---|---|---|
| 管理员 | 完全控制 | 网站所有者 |
| 编辑 | 管理所有内容 | 内容主编 |
| 作者 | 管理自己的文章 | 内容作者 |
| 投稿者 | 撰写文章(需审核) | 外部撰稿人 |
| 订阅者 | 仅阅读权限 | 付费会员 |
安全建议
- 禁用注册功能(如果不需要)
- 限制用户注册角色
- 定期审查用户列表
- 删除不活跃账户
文件系统安全
保护敏感文件
apache
# .htaccess - 保护 wp-config.php
<Files wp-config.php>
Order deny,allow
Deny from all
</Files>
# 保护 .htaccess 自身
<Files .htaccess>
Order deny,allow
Deny from all
</Files>
# 禁止 PHP 执行(上传目录)
<Directory "wp-content/uploads">
<FilesMatch "\.php$">
Order deny,allow
Deny from all
</FilesMatch>
</Directory>目录浏览禁用
apache
# 禁用目录浏览
Options -IndexesSSH/SFTP 权限
bash
# 正确的文件权限
chmod 644 wp-config.php # 可读写,不可执行
chmod 755 /wp-admin/ # 可读可执行
chmod 755 /wp-includes/ # 可读可执行
chmod 755 /wp-content/themes/
chmod 755 /wp-content/plugins/
chmod 755 /wp-content/uploads/权限设置
wp-config.php权限不要设置为 777- 避免使用 777 权限(可读可写可执行)
- 生产环境谨慎使用 775
数据库安全
wp-config.php 数据库配置
php
// 使用安全的数据库前缀
$table_prefix = 'wp_secure_2024_';
// 启用数据库字符集
define('DB_CHARSET', 'utf8mb4');
// 不显示数据库错误
define('DB_HOST', 'localhost');数据库用户权限
sql
-- WordPress 需要的最小权限
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX
ON wp_database.*
TO 'wp_user'@'localhost' IDENTIFIED BY 'strong_password';数据库安全措施
- 使用强密码
- 定期备份
- 限制远程访问
- 启用 SSL 连接
登录安全
限制登录尝试
使用插件或代码:
php
// 在 functions.php 中添加(基础版本)
function check_attempted_login($user, $username, $password) {
if (get_transient('attempted_login_' . $username)) {
$max_attempts = 3;
if ($max_attempts <= get_transient('attempted_login_' . $username)) {
return new WP_Error('too_many_attempts',
'登录尝试次数过多,请 15 分钟后重试。');
}
}
return $user;
}
add_filter('authenticate', 'check_attempted_login', 30, 3);更改登录 URL
php
// 将 wp-admin 和 wp-login.php 重定向
// 使用 WPS Hide Login 插件更安全两步验证
推荐插件:
- Wordfence Login Security - 免费
- Two Factor - 开源
- Google Authenticator - 知名方案
SSL/HTTPS 配置
强制 HTTPS
php
// wp-config.php
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);.htaccess 重定向
apache
# HTTP 到 HTTPS 重定向
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]WordPress 安全插件
| 插件 | 功能 | 评分 |
|---|---|---|
| Wordfence Security | 防火墙、扫描、两步验证 | ⭐ 4.8 |
| Sucuri Security | 安全审计、恶意软件扫描 | ⭐ 4.7 |
| iThemes Security | 50+ 安全功能 | ⭐ 4.6 |
| All In One WP Security | 综合安全工具 | ⭐ 4.7 |
安全清单
日常维护
□ 保持 WordPress 核心更新
□ 保持主题更新
□ 保持插件更新
□ 定期检查用户账户
□ 定期备份网站
□ 审查登录日志每月检查
□ 安全扫描
□ 清理未使用的插件/主题
□ 检查文件完整性
□ 更新服务器软件
□ 审查安全设置新站设置
□ 修改默认管理员用户名
□ 使用强密码
□ 安装安全插件
□ 配置防火墙
□ 启用备份系统
□ 隐藏 WordPress 版本号
□ 限制登录尝试
□ 启用 SSL安全监控
监控日志
php
// 记录登录尝试(functions.php)
function log_login_attempts($login) {
$ip = $_SERVER['REMOTE_ADDR'];
$time = current_time('mysql');
$file = ABSPATH . 'wp-content/login-log.txt';
$message = "$ip | $time | $login\n";
file_put_contents($file, $message, FILE_APPEND);
}
add_action('wp_login_failed', 'log_login_attempts');文件监控
使用 Wordfence 或 Sucuri 的文件监控功能检测:
- 核心文件修改
- 新增可疑文件
- 权限变更
应急响应
被黑后的处理步骤
- 保持冷静,切勿慌乱操作
- 立即联系主机服务商
- 检查并修改所有密码
- 恢复干净的备份
- 更新所有软件
- 扫描并清理恶意代码
- 加强安全防护
重要提醒
如果网站被植入恶意代码,搜索引擎会将其标记为危险网站。 一旦发现被黑,立即行动!
