第 21 章

安全加固清单

必做项与系统已内置的七项防护。

必做项

  • 删除 install.php
  • 删除 tests/ 目录(本地验收脚本,正式站不需要)
  • inc/config.local.php 里的 APP_DEBUG 设为 false
  • 数据库用户不要用 root,单独建库单独授权
  • 宝塔面板开启 HTTPS,并给站点配 SSL 证书
  • 后台路径可改:把 admin/ 改名成别的(比如 manage-8f3a/),减少被扫的概率

已内置的防护

措施说明
密码哈希password_hash + password_verify,不存明文
会话固定防护登录成功后重新生成 session id
登录限流同一 IP 连续失败会被临时锁定
CSRF 校验所有写操作校验 token
输出转义前台用户可见字段一律 htmlspecialchars
SQL 参数化全部使用 PDO 预处理,无字符串拼接
提交深度限制表单数组递归深度超过 8 层直接丢弃

config.local.php 的权限

它含数据库密码。建议设成 640,属主为 Web 用户:

chmod 640 inc/config.local.php
chown www:www inc/config.local.php

不要把内部目录暴露在 Web 根目录

data/(备份与导出)、inc/(源码与配置)、tests/(验收脚本)都不应该能被浏览器直接访问。

Apache:源码里已经为这三个目录放了 .htaccess,无需额外操作。

Nginx(宝塔默认是 Nginx):在「网站 → 设置 → 配置文件」里加上:

location ^~ /data/  { deny all; }
location ^~ /inc/   { deny all; }
location ^~ /tests/ { deny all; }

更稳妥的做法是把 data/ 放在站点根目录之外,通过 config.local.php 里的 DATA_DIR 指过去。