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 观察
安全不是一次性的项目,而是持续的过程。对于资源有限的个人站长和小团队,建议优先完成以下「安全基本盘」:
- ✅ 启用 HTTPS(Let's Encrypt 免费)
- ✅ 配置基础安全头(CSP、X-Frame-Options 等)
- ✅ 使用强密码 + 双因素认证
- ✅ 定期更新系统和所有软件
- ✅ 每日备份且定期测试恢复
这五件事做到位,可以抵御 90% 以上的常见攻击。更多安全工具和推荐服务,请查看 16IDC 安全资源页。