Hyperf基础安全配置遵循“默认收紧、按需放开”原则,涵盖中间件链校验、输入输出双保险、环境配置隔离、异常熔断管控四大核心。

Hyperf基础安全配置的核心在于“默认收紧、按需放开”,不是等出问题再补救,而是从启动那一刻就守住边界。重点不在堆砌功能,而在控制输入、隔离权限、隐藏细节、及时响应。
中间件链:第一道过滤网
所有请求必须经过中间件层层校验,不能绕过。关键做法包括:
- 身份认证中间件必须前置,未登录用户直接拦截,不进入后续逻辑
- 数据验证中间件紧随其后,对每个接口的请求参数强制校验,例如:
`'email' => 'required|email|trim'` —— 不仅验格式,还要去首尾空格,防绕过 - 限流中间件按IP或用户ID维度启用,避免单点打爆服务;生产环境建议开启全局QPS限制(如每秒50次)
- 日志中间件只记录必要字段(如URI、状态码、耗时),敏感参数(密码、token)必须脱敏或完全不记
输入验证与输出转义:双保险机制
用户给的数据永远不可信,系统吐出去的内容必须适配上下文:
- 控制器接收参数前,先用validationFactory->make()走完整规则校验,拒绝非法值(如SQL关键字、脚本标签)
- 数据库查询一律使用Active Record或预处理语句,禁用拼接SQL字符串
- 模板中输出变量,纯文本用Html::encode(),富文本内容必须经HtmlPurifier过滤,不允许执行JS或加载远程资源
- API返回的错误信息不暴露路径、类名、数据库结构等内部细节,统一返回{"code": 400, "message": "请求参数有误"}
配置与环境:切断泄露路径
很多漏洞源于配置管理松散:
- 敏感配置(数据库密码、Redis密钥、第三方API Token)全部通过.env文件注入,禁止写死在PHP配置文件中
- 确保.env文件权限为600,Web服务器无法直接HTTP访问
- 不同环境使用独立配置文件(.env.production / .env.staging),生产环境自动关闭调试模式和详细错误页
- 配置中心(如Nacos、Apollo)启用时,开启配置变更审计日志,谁改了什么、何时改的,都要可追溯
异常与熔断:故障不扩散
安全不只是防攻击,更是控影响范围:
- 全局异常处理器捕获未处理异常,统一返回标准错误结构,同时触发告警(如企业微信/钉钉机器人)
- 对外部依赖(HTTP客户端、Redis、MySQL)全部配置超时和熔断,例如调用第三方API失败3次即熔断30秒
- 重试策略启用BudgetRetryPolicy,限制重试请求占比(如不超过总流量20%),防雪崩
- 核心接口增加业务级风控,比如同一用户1分钟内注册超过3次,直接触发人机验证或临时封禁










