news 2026/4/20 22:46:57

API 安全设计最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
API 安全设计最佳实践

系列导读:本篇将深入讲解 API 安全设计的核心方法与最佳实践。


文章目录

    • 目录
    • 一、API 安全威胁
      • 1.1 常见威胁
      • 1.2 OWASP API Top 10
    • 二、认证与授权
      • 2.1 OAuth2 认证
      • 2.2 JWT Token
      • 2.3 RBAC 权限控制
    • 三、API 网关安全
      • 3.1 Kong 网关配置
      • 3.2 限流配置
    • 四、安全最佳实践
      • 4.1 输入验证
      • 4.2 敏感数据保护
      • 4.3 安全响应头
    • 总结

目录

  • 一、API 安全威胁
  • 二、认证与授权
  • 三、API 网关安全
  • 四、安全最佳实践
  • 总结

一、API 安全威胁

1.1 常见威胁

威胁说明
注入攻击SQL、命令注入
越权访问水平/垂直越权
数据泄露敏感信息暴露
DDoS 攻击拒绝服务
中间人攻击数据窃取

1.2 OWASP API Top 10

1. 对象级别授权失效 2. 身份认证失效 3. 对象属性级别授权失效 4. 资源消耗无限制 5. 功能级别授权失效 6. 批量操作不受限 7. 注入攻击 8. 安全配置错误 9. 库组件版本过旧 10. 日志与监控不足

二、认证与授权

2.1 OAuth2 认证

// OAuth2 配置@Configuration@EnableAuthorizationServerpublicclassAuthServerConfigextendsAuthorizationServerConfigurerAdapter{@Overridepublicvoidconfigure(ClientDetailsServiceConfigurerclients)throwsException{clients.inMemory().withClient("client-app").secret("{bcrypt}$2a$10$...").authorizedGrantTypes("authorization_code","refresh_token").scopes("read","write").redirectUris("https://app.example.com/callback");}}

2.2 JWT Token

// JWT 生成publicStringgenerateToken(Useruser){returnJwts.builder().setSubject(user.getId()).claim("roles",user.getRoles()).setIssuedAt(newDate()).setExpiration(newDate(System.currentTimeMillis()+3600000)).signWith(SignatureAlgorithm.HS256,secretKey).compact();}// JWT 验证publicClaimsparseToken(Stringtoken){returnJwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();}

2.3 RBAC 权限控制

// 权限注解@PreAuthorize("hasRole('ADMIN')")@DeleteMapping("/users/{id}")publicvoiddeleteUser(@PathVariableLongid){userService.delete(id);}// 动态权限@PreAuthorize("@permissionChecker.check(#id)")@GetMapping("/orders/{id}")publicOrdergetOrder(@PathVariableLongid){returnorderService.getById(id);}

三、API 网关安全

3.1 Kong 网关配置

# Kong 插件配置_format_version:"3.0"services:-name:order-serviceurl:http://order-service:8080plugins:-name:jwtconfig:secret_is_base64:false-name:rate-limitingconfig:minute:100policy:local-name:request-size-limitingconfig:allowed_payload_size:10

3.2 限流配置

// 限流注解@RateLimiter(value=10,timeout=1,timeUnit=TimeUnit.SECONDS)@GetMapping("/api/orders")publicList<Order>listOrders(){returnorderService.list();}

四、安全最佳实践

4.1 输入验证

// 参数校验@PostMapping("/users")publicUsercreateUser(@Valid@RequestBodyUserDTOdto){returnuserService.create(dto);}// DTO 校验规则@DatapublicclassUserDTO{@NotBlank(message="用户名不能为空")@Size(min=3,max=20,message="用户名长度3-20")privateStringusername;@Email(message="邮箱格式不正确")privateStringemail;@Pattern(regexp="^1[3-9]\\d{9}$",message="手机号格式不正确")privateStringphone;}

4.2 敏感数据保护

// 数据脱敏@JsonSerialize(using=PhoneMaskSerializer.class)privateStringphone;// 138****8888// 加密存储@EncryptprivateStringidCard;// 日志脱敏log.info("用户登录: phone={}",MaskUtils.maskPhone(phone));

4.3 安全响应头

@ConfigurationpublicclassSecurityHeaderConfig{@BeanpublicSecurityFilterChainfilterChain(HttpSecurityhttp)throwsException{http.headers().contentSecurityPolicy("default-src 'self'").and().xssProtection().and().frameOptions().deny().httpStrictTransportSecurity();returnhttp.build();}}

总结

API 安全威胁:OWASP Top 10
认证与授权:OAuth2、JWT、RBAC
API 网关安全:Kong、限流
安全最佳实践:输入验证、数据保护、安全头

下篇预告:身份认证与授权架构设计


作者:刘~浪地球
系列:安全架构(二)
更新时间:2026-04-20

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 22:42:15

如何优化深分页场景下的回表代价_延迟关联与主键游标分页

OFFSET 越大查询越慢&#xff0c;因MySQL需扫描并丢弃前NM行&#xff0c;深分页时即使走索引也要回表读取百万级主键再判断条件&#xff0c;本质是“假走索引、真全扫”。为什么 OFFSET 越大&#xff0c;查询越慢&#xff1f;MySQL 的 OFFSET 不是跳过前 N 行再取数据&#xff…

作者头像 李华
网站建设 2026/4/20 22:39:15

ionic 模态窗口:全面解析与最佳实践

ionic 模态窗口:全面解析与最佳实践 引言 在移动应用开发中,模态窗口是一个常见且实用的界面元素。它允许用户在当前页面之上显示一个悬浮窗口,以便提供额外信息或进行交互操作。Ionic框架作为一个流行的开源移动应用开发框架,提供了丰富的组件和工具来构建跨平台的应用。…

作者头像 李华
网站建设 2026/4/20 22:37:08

智能产品待办列表员中的需求管理与优先级排序

智能产品待办列表员中的需求管理与优先级排序 在快节奏的现代生活中&#xff0c;智能产品的待办列表功能已成为许多人管理任务的重要工具。面对海量的需求与有限的时间&#xff0c;如何高效管理需求并合理排序优先级&#xff0c;成为用户和产品设计者共同关注的焦点。本文将深…

作者头像 李华
网站建设 2026/4/20 22:36:04

如何用纯前端技术3步将PPTX转换为交互式HTML?

如何用纯前端技术3步将PPTX转换为交互式HTML&#xff1f; 【免费下载链接】PPTX2HTML Convert pptx file to HTML by using pure javascript 项目地址: https://gitcode.com/gh_mirrors/pp/PPTX2HTML 你是否曾遇到过需要在线分享演示文稿却受限于Office软件安装的困扰&a…

作者头像 李华
网站建设 2026/4/20 22:35:56

告别网络卡顿!用FortiGate防火墙的SD-WAN性能SLA,自动帮你选最优宽带

企业多宽带智能选路实战&#xff1a;FortiGate SD-WAN性能SLA配置指南 当企业同时拥有电信、联通等多条宽带线路时&#xff0c;IT管理员常面临一个尴尬局面——尽管带宽资源充足&#xff0c;员工访问电商平台或视频会议时仍频繁遭遇卡顿。传统手动切换线路的方式既低效又难以应…

作者头像 李华
网站建设 2026/4/20 22:34:34

深入uvmgen生成的UVM环境:如何从“空壳”到“实战”的改造指南

深入uvmgen生成的UVM环境&#xff1a;从框架搭建到实战验证的完整指南 在IC验证领域&#xff0c;UVM&#xff08;Universal Verification Methodology&#xff09;已成为行业标准方法学。然而&#xff0c;每次从零开始搭建UVM验证环境既耗时又容易出错。这正是uvmgen工具的价值…

作者头像 李华