Skip to content

WordPress 安全基础

安全原则

核心安全原则

  1. 最小权限原则 - 只授予必要的权限
  2. 深度防御 - 多层安全防护
  3. 及时更新 - 保持核心、主题、插件最新
  4. 安全编码 - 所有输入验证、输出转义

用户安全

强密码策略

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 -Indexes

SSH/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 Security50+ 安全功能⭐ 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 的文件监控功能检测:

  • 核心文件修改
  • 新增可疑文件
  • 权限变更

应急响应

被黑后的处理步骤

  1. 保持冷静,切勿慌乱操作
  2. 立即联系主机服务商
  3. 检查并修改所有密码
  4. 恢复干净的备份
  5. 更新所有软件
  6. 扫描并清理恶意代码
  7. 加强安全防护

重要提醒

如果网站被植入恶意代码,搜索引擎会将其标记为危险网站。 一旦发现被黑,立即行动!

相关资源

基于 WordPress官方文档 构建