
1) 【一句话结论】在360的API安全网关项目中,通过“认证-授权-输入验证-版本控制”分层策略,结合动态规则引擎(如Nacos配置中心)和自动化测试,实现安全防护策略的动态更新与量化优化,有效降低漏洞风险(如SQL注入修复率提升40%)。
2) 【原理/概念讲解】
讲解关键概念,补充API版本控制:
3) 【对比与适用场景】
| 安全措施 | 定义 | 特性 | 使用场景 | 注意点 | 业务权衡 |
|---|---|---|---|---|---|
| 认证(API Key) | 发给客户端的唯一密钥 | 简单,无状态,轻量级,不存储用户信息 | 开发者工具、轻量级API(如获取用户信息接口) | 需严格限制密钥权限,防止泄露 | 适合轻量API,但信息承载有限,若需用户信息,需额外请求 |
| 认证(JWT) | 自包含的JSON令牌(含签名、过期时间、用户信息) | 无状态,可跨域,携带用户信息(如用户ID、角色),减少后续请求参数 | 微服务间通信、单点登录(如用户登录后,后续请求携带JWT) | 需妥善存储密钥(如密钥库),防止签名被篡改;过期时间需合理设置 | 适合高并发微服务,减少网络开销,但需处理过期和刷新逻辑 |
| 授权(RBAC) | 基于角色的访问控制 | 按角色划分权限,逻辑清晰,易于管理 | 企业级应用(如后台管理系统,按“管理员”“普通用户”分配权限) | 角色设计需合理,避免权限越权(如“管理员”角色不应有“用户删除”权限,除非明确授权) | 适合权限结构清晰的场景,但角色变更时需重新分配权限 |
| 授权(ABAC) | 基于属性的访问控制 | 根据用户属性(如部门、权限标签)、资源属性(如资源状态)、环境属性(如时间、IP)动态授权 | 复杂业务场景(如金融系统,按用户风险等级授权交易额度;医疗系统,按医生科室授权访问患者数据) | 属性模型复杂,实现难度高,需维护属性库 | 适合权限细粒度、动态变化的场景,但系统复杂度高,维护成本大 |
| 输入验证(正则) | 使用正则表达式校验参数格式 | 语法简洁,支持复杂模式匹配(如邮箱、身份证号) | 格式严格场景(如注册时验证邮箱格式) | 正则表达式需测试,避免性能问题(如复杂正则导致CPU占用过高);边界情况需覆盖(如空字符串、特殊字符) | 适合格式固定的参数,但无法覆盖所有业务逻辑(如业务规则中的特殊场景) |
| 输入验证(业务规则) | 根据业务逻辑校验参数 | 结合业务规则(如密码复杂度、用户状态) | 业务逻辑复杂的场景(如登录时验证用户是否被禁用;支付时验证余额是否足够) | 需编写业务规则代码,维护成本高;需考虑异常处理(如参数无效时的错误提示) | 适合业务逻辑明确的场景,但需与正则结合,提高验证全面性 |
| 限流(令牌桶) | 维持固定令牌数,按速率发放 | 适合突发流量,平滑流量,避免突发流量导致服务崩溃 | 高并发场景(如用户登录接口,防止暴力破解) | 令牌桶速率需根据业务调整(如登录接口每分钟100次),避免误限流(如正常用户因速率过高被限流) | 适合突发流量场景,但配置不当可能导致正常业务被限流 |
| 限流(固定窗口) | 每个时间窗口内允许固定次数请求 | 简单,计算成本低 | 低并发场景(如获取用户信息接口,每秒10次) | 可能存在突发流量超限(如短时间内大量请求),导致服务不可用 | 适合低并发场景,但突发流量时效果差 |
| DDoS防护(WAF) | 防火墙规则拦截恶意请求 | 实时拦截,支持规则更新(如添加新的攻击特征) | 公网暴露的API网关(如对外提供服务的接口) | 规则需定期更新,避免误拦截合法请求(如正常用户请求被误判为恶意);需考虑规则冲突(如多个规则同时匹配) | 适合公网暴露的接口,但规则误拦截会影响业务可用性 |
4) 【示例】(假设360的“用户登录API”版本1.0):
Authorization: Bearer <JWT(含用户ID=1001, role="user", exp=1672531200)>,X-API-Version: 1.0X-API-Version: 1.0,匹配当前版本策略(如旧版本1.0的输入验证规则)。exp字段),有效则进入下一步。username含' or '1'='1,或频率超500次/秒),通过则进入下一步。role="user",判断是否允许访问/user/login(仅用户自身访问)。username:非空,长度8-20,正则^[a-zA-Z0-9_]{8,20}$,业务规则(用户名未被禁用)。password:非空,复杂度(至少8位含字母和数字),正则^(?=.*[a-z])(?=.*\d)[a-zA-Z\d]{8,}$,业务规则(密码与用户名不同)。username=admin' or '1'='1)。
username正则+黑名单[' or ', ' or '1'='1']),更新频率5分钟。5) 【面试口播版答案】
“我参与过360的API安全网关项目,负责设计安全防护策略。我们采用分层策略:认证用JWT(无状态,适合高并发微服务,携带用户信息减少后续请求开销),授权用RBAC(按角色控制权限,如“用户”仅访问自身数据接口,“管理员”可管理所有接口),输入验证通过正则+业务规则(如密码复杂度校验),同时结合限流(令牌桶防暴力破解)和DDoS防护(WAF拦截恶意请求)。遇到的技术难题是输入验证不严谨导致的SQL注入漏洞,当时通过动态规则引擎(Nacos配置中心)实时更新正则表达式和黑名单,规则更新频率为5分钟一次,冲突检测机制优先级高的规则生效,并编写自动化测试用例(JUnit+模糊测试工具),最终修复漏洞,攻击成功率下降80%,漏洞修复率提升40%。”
6) 【追问清单】
username=admin' or '1'='1时,绕过正则校验,触发SQL注入,返回所有用户数据。7) 【常见坑/雷区】
username的正则改为^[a-zA-Z0-9_]{7,20}$,导致合法用户名被误判为无效),影响用户体验(如用户无法登录)。