Ubuntu环境下ThinkPHP安全防护全指南
定期更新ThinkPHP框架至最新稳定版本(如LTS版本),及时修复已知安全漏洞(如远程代码执行、反序列化漏洞等);同时更新Ubuntu系统和PHP至最新版本,修补系统级安全漏洞。可通过composer update命令更新ThinkPHP,sudo apt update && sudo apt upgrade更新系统。
app_debug设置为false(位于config/app.php),避免泄露敏感错误信息(如数据库结构、代码逻辑);同时关闭app_trace(关闭请求追踪),防止堆栈信息暴露。php.ini中禁用eval()、exec()、shell_exec()等危险函数(通过disable_functions参数),防止攻击者通过恶意代码执行系统命令。openssl rand -hex 32),设置app_key(位于config/app.php),用于数据加密(如Cookie、Session)和身份验证,避免密钥泄露导致的安全风险。Validate类定义严格的验证规则(如字段必填、长度、格式),对用户输入进行全面校验。例如:$validate = new \think\Validate([
    'username' => 'require|max:20|min:3',
    'email'    => 'require|email',
    'age'      => 'number|between:1,120'
]);
if (!$validate->check(input('post.'))) {
    return json(['error' => $validate->getError()]);
}
input()函数的filter参数或全局过滤规则(config/app.php中的app_filter),过滤恶意字符(如strip_tags去除HTML标签、htmlspecialchars转义特殊字符)。例如:$content = input('post.content', '', 'strip_tags|htmlspecialchars');
{$variable|htmlspecialchars}语法,自动转义HTML特殊字符,防止XSS(跨站脚本)攻击。Db::name('table')->where('id', $id)->find())或Query Builder的参数绑定功能,避免直接拼接SQL语句。例如:// 正确:参数绑定
$user = Db::name('users')->where('username', $username)->find();
// 错误:直接拼接(高风险)
$user = Db::query("SELECT * FROM users WHERE username = '$username'");
config/middleware.php中添加think\middleware\CheckCsrfToken::class),并在表单中添加CSRF令牌({!! csrf_token() !!}),验证请求的合法性。jpg、png、gif)、大小(如不超过2MB),并对上传文件进行重命名(使用uniqid()生成唯一文件名)和病毒扫描(如ClamAV)。例如:$file = request()->file('file');
$info = $file->validate(['size' => 1024*1024*2, 'ext' => 'jpg,png,gif'])->move('uploads');
if (!$info) {
    return $file->getError();
}
include $_GET['file']),使用白名单机制限制可包含的文件。think-jwt扩展生成和验证Token:use think\facade\Auth;
// 登录时生成Token
$token = Auth::guard('api')->login($user);
// 请求时验证Token
if (!Auth::guard('api')->check()) {
    return json(['error' => 'Unauthorized']);
}
think-acl扩展定义角色(如管理员、普通用户)和权限(如访问后台、编辑内容),限制用户对敏感资源的访问。certbot工具),配置Apache或Nginx监听443端口,强制跳转HTTP到HTTPS(如Nginx中添加return 301 https://$host$request_uri;),加密数据传输,防止中间人攻击。UFW(Uncomplicated Firewall)或fail2ban限制单个IP的访问频率(如每分钟最多60次请求),防止DDoS攻击和暴力破解。例如,UFW限制规则:sudo ufw limit ssh/tcp  # 限制SSH登录速率
sudo ufw allow http/tcp  # 允许HTTP
sudo ufw allow https/tcp # 允许HTTPS
sudo ufw enable          # 启用防火墙
/etc/ssh/sshd_config),设置PermitRootLogin no,使用普通用户登录后通过sudo执行管理员操作,降低SSH暴力破解风险。/var/www/html)权限为755(sudo chmod -R 755 /var/www/html),敏感文件(如config.php、.env)权限为640(sudo chmod 640 /var/www/html/config.php),避免其他用户读取敏感信息。www-data)对上传目录、缓存目录等具有写权限以外的权限(如chmod -R 755 uploads),防止上传恶意文件并被执行。config/log.php中设置level为error或info),记录错误信息和用户操作日志(如登录、数据修改),便于后续排查安全事件。fail2ban监控日志文件(如/var/log/auth.log),自动封禁频繁失败的IP地址;使用监控工具(如Prometheus+Granafa)监控服务器性能(如CPU、内存)和应用状态,及时发现异常。