2026 年网站安全自查清单:从基础到进阶的全面防护

网站安全不是一次性的配置,而是需要持续维护和更新的过程。根据 Verizon 2025 年数据泄露调查报告,43% 的网络攻击针对小型企业网站,而超过 60% 的漏洞利用的是已知且已有补丁的安全问题。这意味着大多数安全问题可以通过及时的检查加固来预防。

本文提供一份可操作的安全自查清单,帮助你系统性地检查和加固网站安全。

一、基础设施安全

服务器配置

  • SSH 禁用 root 直接登录(使用普通用户 + sudo)
  • SSH 使用密钥认证而非密码认证
  • 修改 SSH 默认端口(22 → 自定义端口)
  • 配置防火墙(只开放必要端口)
  • 安装 Fail2Ban 防止暴力破解
  • 关闭不必要的服务和端口
  • 设置自动安全更新 (unattended-upgrades)
# 快速检查命令
# 检查开放端口
ss -tlnp

# 检查 SSH 配置
grep -E "PermitRootLogin|Port|PasswordAuthentication" /etc/ssh/sshd_config

# 检查防火墙规则
ufw status verbose

操作系统加固

  • 系统已更新到最新的安全补丁
  • 删除不必要的系统用户
  • 配置合理的文件权限(网站目录 755,文件 644)
  • 启用 SELinux 或 AppArmor
  • 配置内核参数(sysctl 安全优化)
  • 限制用户资源使用(limits.conf)

二、Web 服务器安全

Nginx/Apache 配置

  • 隐藏服务器版本信息(server_tokens off)
  • 限制 HTTP 方法(只允许 GET/POST/HEAD)
  • 配置合理的数据上传大小限制
  • 设置请求超时时间
  • 禁用目录列表(autoindex off)
  • 配置安全的 SSL/TLS 协议
# Nginx 安全配置示例
server {
    # 隐藏版本信息
    server_tokens off;
    
    # 限制请求方法
    if ($request_method !~ ^(GET|HEAD|POST)$) {
        return 405;
    }
    
    # 限制上传大小
    client_max_body_size 10M;
    
    # 超时设置
    client_body_timeout 10;
    client_header_timeout 10;
    send_timeout 10;
    
    # 禁用目录列表
    autoindex off;
    
    # 拒绝访问隐藏文件
    location ~ /\. {
        deny all;
    }
    
    # 拒绝访问敏感文件
    location ~ \.(env|log|sql|bak)$ {
        deny all;
    }
}
  • 配置 CSP(Content Security Policy)头
  • 启用 X-Frame-Options 防止点击劫持
  • 配置 X-Content-Type-Options: nosniff
  • 启用 Referrer-Policy
  • 配置 Permissions-Policy
# HTTP 安全头配置
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 Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

三、应用层安全

代码安全

  • 所有用户输入进行验证和清理
  • 使用参数化查询防止 SQL 注入
  • 输出编码防止 XSS 攻击
  • CSRF Token 已配置在所有表单
  • 文件上传有类型和大小限制
  • 敏感信息不在 URL 参数中传递
  • 错误处理不暴露敏感信息
// PHP 安全实践示例

// 参数化查询(防止 SQL 注入)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);

// CSRF Token
session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// 文件上传验证
$allowed_types = ['image/jpeg', 'image/png', 'image/webp'];
if (!in_array($_FILES['file']['type'], $allowed_types)) {
    die('不支持的文件类型');
}

认证和授权

  • 密码策略:最少 8 位,包含大小写和数字
  • 密码加密存储(bcrypt/argon2)
  • 登录尝试次数限制
  • 会话超时设置
  • 记住我功能使用安全的 Token
  • 双因素认证(2FA)已可用
  • 定期强制密码更新(敏感系统)

CMS 安全(WordPress 等)

  • CMS 核心程序已更新到最新版本
  • 所有插件/主题已更新
  • 删除未使用的插件和主题
  • 修改默认管理员用户名(非 admin)
  • 使用强密码
  • 限制登录尝试次数
  • 配置 WAF 规则
  • 定期扫描恶意软件

四、数据层安全

数据库安全

  • 数据库端口不对外暴露
  • 使用最小权限原则创建数据库用户
  • 定期备份数据库
  • 备份文件加密存储
  • 数据库查询日志开启(生产环境可选)
  • 移除默认测试数据库
-- MySQL 安全配置
-- 创建专用用户并授予最小权限
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'webapp'@'localhost';
-- 不要使用 GRANT ALL

-- 移除匿名用户
DELETE FROM mysql.user WHERE User='';

-- 禁止远程 root 登录
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');

数据加密

  • 传输中加密:全站 HTTPS
  • 存储加密:敏感数据加密存储
  • 密码使用 bcrypt/argon2 哈希
  • 备份文件加密
  • API 通信使用 API Key 或 JWT

五、运维安全

监控与日志

  • 访问日志已开启
  • 错误日志已配置轮转
  • 设置日志监控告警
  • 异常登录检测
  • 文件完整性监控(如 Tripwire/AIDE)
# 配置 logwatch 日志分析
apt install logwatch -y
# 每天自动发送日志摘要邮件

# 查看最近的登录记录
last -10

# 查看认证失败记录
grep "Failed password" /var/log/auth.log | tail -20

备份与恢复

  • 数据库每日自动备份
  • 网站文件每日自动备份
  • 备份存储在不同位置(本地 + 对象存储)
  • 备份加密
  • 定期测试备份恢复
  • 有明确的灾难恢复计划

访问控制

  • 管理后台限制 IP 访问
  • 使用 VPN 访问服务器
  • 定期审查用户权限
  • 离职人员账号及时回收
  • API 密钥定期轮换

六、第三方服务安全

  • 所有第三方服务启用双因素认证
  • 第三方 API 密钥使用环境变量
  • 审查第三方服务的权限范围
  • 及时更新第三方库和依赖
  • 删除不必要的第三方集成
# 检查 NPM 依赖安全(Node.js 项目)
npm audit

# 检查 Composer 依赖安全(PHP 项目)
composer audit

# 检查 Python 依赖安全
pip-audit

七、安全工具推荐

工具 用途 类型 是否免费
SSL Labs SSL/TLS 配置评级 在线工具 ✅ 免费
securityheaders.com HTTP 安全头检测 在线工具 ✅ 免费
OWASP ZAP 自动化渗透测试 本地工具 ✅ 开源
WPScan WordPress 安全扫描 本地工具 ✅ 开源
Nmap 端口和服务扫描 本地工具 ✅ 开源
Nikto Web 服务器扫描 本地工具 ✅ 开源
Qualys FreeScan 漏洞扫描 在线工具 ✅ 免费
Detectify 自动化安全扫描 在线工具 付费

八、安全时间表

频率 任务
📅 每日 检查备份状态和基本监控告警
📅 每周 检查系统更新、审查错误日志
📅 每月 审计用户账号、检查安全配置变更
📅 每季 全面安全检查、更新依赖和框架
📅 每半年 渗透测试、安全评估、更新灾难恢复计划
📅 每年 完整安全审查、更新安全策略文档

16IDC 观察

安全不是一次性的项目,而是持续的过程。对于资源有限的个人站长和小团队,建议优先完成以下「安全基本盘」:

  1. ✅ 启用 HTTPS(Let's Encrypt 免费)
  2. ✅ 配置基础安全头(CSP、X-Frame-Options 等)
  3. ✅ 使用强密码 + 双因素认证
  4. ✅ 定期更新系统和所有软件
  5. ✅ 每日备份且定期测试恢复

这五件事做到位,可以抵御 90% 以上的常见攻击。更多安全工具和推荐服务,请查看 16IDC 安全资源页