当前位置: 首页 > article >正文

API安全设计与防护实战

API安全设计与防护实战一、API安全概述API作为系统间交互的接口是攻击的主要目标。一个安全的API设计需要考虑多个层面的防护包括认证、授权、数据保护、攻击防护等。二、API认证机制2.1 API Key认证Component public class ApiKeyFilter extends OncePerRequestFilter { private static final String API_KEY_HEADER X-API-Key; private static final String VALID_API_KEY your-api-key-here; Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String apiKey request.getHeader(API_KEY_HEADER); if (!VALID_API_KEY.equals(apiKey)) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.getWriter().write(Unauthorized: Invalid API Key); return; } filterChain.doFilter(request, response); } }2.2 基于证书的双向认证server: ssl: enabled: true key-store: classpath:server.jks key-store-password: password trust-store: classpath:truststore.jks trust-store-password: password client-auth: need三、API授权策略3.1 RBAC基于角色的访问控制Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers(/api/admin/**).hasRole(ADMIN) .antMatchers(/api/user/**).hasRole(USER) .antMatchers(/api/public/**).permitAll() .anyRequest().authenticated(); } }3.2 ABAC基于属性的访问控制Component public class AbacAuthorizationManager { public boolean isAllowed(User user, Resource resource, Action action) { // 根据用户属性、资源属性、环境属性进行动态授权判断 if (admin.equals(user.getRole())) { return true; } if (read.equals(action) resource.isPublic()) { return true; } if (resource.getOwnerId().equals(user.getId())) { return true; } return false; } }四、输入验证与数据保护4.1 参数校验RestController RequestMapping(/api/users) public class UserController { PostMapping public ResponseEntityUser createUser(Valid RequestBody UserCreateRequest request) { // 参数已通过Valid注解自动校验 User user userService.createUser(request); return ResponseEntity.ok(user); } } public class UserCreateRequest { NotBlank(message 用户名不能为空) Size(min 3, max 50, message 用户名长度必须在3-50之间) private String username; Email(message 邮箱格式不正确) NotBlank(message 邮箱不能为空) private String email; NotBlank(message 密码不能为空) Size(min 8, message 密码长度至少8位) private String password; }4.2 SQL注入防护错误写法// 存在SQL注入风险 String sql SELECT * FROM users WHERE username username ;正确写法// 使用预编译语句 String sql SELECT * FROM users WHERE username ?; PreparedStatement stmt connection.prepareStatement(sql); stmt.setString(1, username); ResultSet rs stmt.executeQuery();4.3 XSS攻击防护import org.jsoup.Jsoup; import org.jsoup.safety.Safelist; public class XssUtils { public static String clean(String input) { if (input null) { return null; } return Jsoup.clean(input, Safelist.relaxed()); } }五、API限流与熔断5.1 使用Bucket4j进行限流Configuration public class RateLimitConfig { Bean public Bucket bucket() { Refill refill Refill.greedy(100, Duration.ofMinutes(1)); Bandwidth limit Bandwidth.classic(100, refill); return Bucket.builder().addLimit(limit).build(); } } Component public class RateLimitFilter extends OncePerRequestFilter { Autowired private Bucket bucket; Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (bucket.tryConsume(1)) { filterChain.doFilter(request, response); } else { response.setStatus(HttpServletResponse.SC_TOO_MANY_REQUESTS); response.getWriter().write(Rate limit exceeded); } } }5.2 Hystrix熔断配置Configuration public class HystrixConfig { Bean public HystrixCommand.Setter defaultCommandProperties() { return HystrixCommand.Setter .withGroupKey(HystrixCommandGroupKey.Factory.asKey(DefaultGroup)) .andCommandPropertiesDefaults(HystrixCommandProperties.Setter() .withExecutionTimeoutInMilliseconds(5000) .withCircuitBreakerRequestVolumeThreshold(20) .withCircuitBreakerErrorThresholdPercentage(50) .withCircuitBreakerSleepWindowInMilliseconds(30000)); } }六、安全审计与日志6.1 审计日志记录Aspect Component public class AuditAspect { Autowired private AuditLogRepository auditLogRepository; Around(annotation(auditable)) public Object audit(ProceedingJoinPoint joinPoint, Auditable auditable) throws Throwable { AuditLog log new AuditLog(); log.setAction(auditable.action()); log.setResource(auditable.resource()); log.setTimestamp(LocalDateTime.now()); try { Object result joinPoint.proceed(); log.setStatus(SUCCESS); return result; } catch (Exception e) { log.setStatus(FAILED); log.setErrorMessage(e.getMessage()); throw e; } finally { auditLogRepository.save(log); } } } Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface Auditable { String action(); String resource(); }6.2 安全日志脱敏public class LogSanitizer { private static final Pattern EMAIL_PATTERN Pattern.compile([a-zA-Z0-9._%-][a-zA-Z0-9.-]\\.[a-zA-Z]{2,}); private static final Pattern PHONE_PATTERN Pattern.compile(1[3-9]\\d{9}); private static final Pattern CARD_PATTERN Pattern.compile(\\d{4}\\s*\\d{4}\\s*\\d{4}\\s*\\d{4}); public static String sanitize(String message) { if (message null) { return null; } String sanitized EMAIL_PATTERN.matcher(message).replaceAll(******.com); sanitized PHONE_PATTERN.matcher(sanitized).replaceAll(1*** **** ****); sanitized CARD_PATTERN.matcher(sanitized).replaceAll(**** **** **** ****); return sanitized; } }七、API安全测试7.1 使用OWASP ZAP进行安全扫描# 启动ZAP代理 zap.sh -daemon -port 8080 -config scanner.maxRuleDurationInMins5 # 运行主动扫描 curl -X POST http://localhost:8080/JSON/ascan/action/scan \ -d {apikey:your-api-key,url:http://localhost:8080/api,recurse:true} # 获取扫描结果 curl http://localhost:8080/JSON/ascan/view/alerts \ -d {apikey:your-api-key,baseurl:http://localhost:8080/api}7.2 安全测试清单认证测试 - [ ] 无Token访问受限API - [ ] 使用过期Token访问 - [ ] 使用无效Token访问 - [ ] Token劫持测试 授权测试 - [ ] 越权访问其他用户数据 - [ ] 普通用户访问管理员接口 - [ ] 未授权访问敏感资源 输入验证测试 - [ ] SQL注入测试 - [ ] XSS攻击测试 - [ ] 参数边界值测试 - [ ] 恶意文件上传测试 安全配置测试 - [ ] HTTPS强制测试 - [ ] CORS配置验证 - [ ] 敏感信息泄露检查 - [ ] 错误信息泄露检查八、总结API安全是一个系统性工程需要从认证授权、输入验证、限流熔断、审计日志等多个维度进行防护。通过采用业界成熟的安全框架和最佳实践可以有效降低API被攻击的风险。同时定期进行安全测试和漏洞扫描及时修复发现的安全问题是保障API安全的重要环节。参考资料OWASP API Security Top 10: https://github.com/OWASP/API-SecuritySpring Security Documentation: https://spring.io/projects/spring-securityBucket4j: https://bucket4j.com/

相关文章:

API安全设计与防护实战

API安全设计与防护实战 一、API安全概述 API作为系统间交互的接口,是攻击的主要目标。一个安全的API设计需要考虑多个层面的防护,包括认证、授权、数据保护、攻击防护等。 二、API认证机制 2.1 API Key认证 Component public class ApiKeyFilter ex…...

AI知识管理不是工具升级,而是教学主权重构:一位特级教师用18个月完成“教案→知识流→认知干预”三级跃迁(全程数据脱敏实录)

更多请点击: https://intelliparadigm.com 第一章:AI知识管理在教育领域的应用 AI知识管理正深刻重塑教育生态,通过智能索引、语义理解与个性化推荐,将碎片化教学资源转化为可检索、可推理、可演化的结构化知识网络。教师可借助自…...

毕业论文神器!2026年必备AI论文软件榜单,免费版也能写合规初稿

2026 年实测 10 款主流 AI 论文工具,千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜;ThouPen 稳坐留学生毕业全流程工具头把交椅;免费工具中DeepSeek Scholar、豆包学术版表现亮眼,30 分钟即可生成万字高质量初稿&#xff0…...

显卡驱动彻底清理解决方案:Display Driver Uninstaller专业使用指南

显卡驱动彻底清理解决方案:Display Driver Uninstaller专业使用指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers…...

3分钟解决Mac与Windows文件交换难题:Nigate免费NTFS读写工具完全指南

3分钟解决Mac与Windows文件交换难题:Nigate免费NTFS读写工具完全指南 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and…...

Switch大气层系统终极指南:从新手到高手的完整成长路径

Switch大气层系统终极指南:从新手到高手的完整成长路径 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要彻底释放你的Switch游戏潜力吗?大气层系统(A…...

Go语言CI/CD流水线实践

Go语言CI/CD流水线实践 引言 CI/CD(持续集成/持续部署)是现代软件开发的核心实践。本文将深入探讨如何为Go语言项目构建高效的CI/CD流水线。 一、CI/CD概述 1.1 CI/CD流程 代码提交 -> 代码审查 -> 构建 -> 测试 -> 部署 -> 监控1.2 关键…...

3分钟搞定Windows桌面整理:NoFences免费开源工具终极指南

3分钟搞定Windows桌面整理:NoFences免费开源工具终极指南 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在杂乱的Windows桌面上寻找文件&#xff…...

边缘计算部署:将计算能力延伸到网络边缘

边缘计算部署:将计算能力延伸到网络边缘 一、边缘计算部署概述 1.1 边缘计算部署的定义 边缘计算部署是指将计算资源和应用服务部署到靠近数据源或用户的网络边缘位置的过程。它通过在边缘位置处理数据,减少延迟,提高响应速度,并降…...

构建可持续的阅读书源生态:从基础导入到高级管理策略

构建可持续的阅读书源生态:从基础导入到高级管理策略 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 在数字阅读日益普及的今天,阅读APP已成为广大书迷获取内容的重要渠道。然而&…...

分布式系统测试:验证分布式系统的正确性和性能

分布式系统测试:验证分布式系统的正确性和性能 一、分布式系统测试概述 1.1 分布式系统测试的定义 分布式系统测试是指对分布式系统进行验证和评估的过程,包括功能测试、性能测试、可靠性测试和安全性测试等方面。它确保分布式系统在各种场景下都能正确、…...

当Agent开始质疑你的原始数据——AI驱动的数据质量自治体系构建(含动态污点追踪与因果溯源模块)

更多请点击: https://intelliparadigm.com 第一章:当Agent开始质疑你的原始数据——AI驱动的数据质量自治体系构建(含动态污点追踪与因果溯源模块) 在传统数据治理范式中,数据质量校验往往滞后于数据摄入,…...

【Appium 系列】第18节-重试与容错 — 移动端测试的稳定性保障

配套代码:utils/retry.py、tests/test_login_api.py说明:本节所有代码示例均来自一个真实的移动端自动化测试项目,已做模糊化处理。为什么需要重试移动端测试比 Web 测试更容易出现偶发性失败。以下几种情况在本地和 CI 上反复出现&#xff1…...

小模型爆发出惊人能量!斯坦福开源框架AgentFlow如何实现复杂任务中的可靠工具使用?

本文介绍了斯坦福大学开源的模块化智能体框架AgentFlow,它通过独特的架构设计和训练方法,在工具集成和规划能力上取得了突破性进展。AgentFlow以Qwen-2.5-7B-Instruct为基础,在10个基准测试中表现突出,超越了大50倍的模型和GPT-4o…...

大模型底座的技术路线

主流大模型目前以token为单位处理文本,因其算力效率高、生态成熟。但byte-level/tokenizer-free路线正快速发展,它更端到端、跨语言统一且对噪声文本鲁棒。未来几年,外部接口可能仍用token,内部却将更多采用byte、patch或latent s…...

SenseNova-U1多模态模型深度解析:NEO-unify架构如何颠覆传统

SenseNova-U1多模态模型深度解析:NEO-unify架构如何颠覆传统 副标题: 从视觉编码器到端到端统一,附实战应用指南 一、痛点:为什么多模态模型这么复杂? 很多开发者第一次接触多模态模型时,会被各种架构绕晕:视觉编码器、文本解码器、适配器、投影层… 感觉像在看天书。 …...

大脑规则:为什么你学不进去?10个科学方法提升学习效率

大脑规则:为什么你学不进去?10个科学方法提升学习效率 副标题: 从进化论到认知科学,附实战学习方案 一、痛点:为什么你总是学不进去? 你有没有这样的经历: 坐在书桌前,书翻开了,但脑子一片空白 熬夜学习,第二天效率更低,形成恶性循环 一边看视频一边回消息,结果什…...

神经网络从入门到精通:10个核心概念+8个实战代码,小白也能懂

神经网络从入门到精通:10个核心概念+8个实战代码,小白也能懂 副标题: 从像素到概念的函数映射,附完整训练流程实战 一、痛点:为什么神经网络这么难理解? 很多初学者第一次接触神经网络时,会被各种术语绕晕:神经元、权重、偏置、激活函数、反向传播、梯度下降… 感觉像…...

LangGraph多智能体工作流:从线性执行到网状协作的重构

LangGraph多智能体工作流:从线性执行到网状协作的重构 1. 标题 (Title) 为了精准覆盖核心关键词、吸引不同层次的读者(AI应用开发者、LangChain进阶学习者、多智能体系统架构师),我准备了以下4个差异化标题: 《LangGraph 重塑AI协作:告别LangChain AgentExecutor的“单线…...

Harness的配置漂移检测与自动修复

云原生时代的稳定性利器:Harness配置漂移检测与自动修复全指南 引言 痛点引入 相信每一位DevOps工程师、SRE或者运维负责人都遇到过这样的噩梦: 测试环境验证了3天的功能,上线到生产10分钟就出现503错误,排查了2小时才发现&…...

Qwen模型 LeetCode 2585. 获得分数的方法数 TypeScript实现

哇!TypeScript版本来啦~这道题用TS写起来特别优雅,类型安全又清晰!让我给你展示一个高效又易读的实现!typescript function waysToReachTarget(target: number, types: number[][]): number {const MOD 1000000007;//…...

如何重塑贴吧体验:贴吧Lite带来的极致纯净浏览革新

如何重塑贴吧体验:贴吧Lite带来的极致纯净浏览革新 【免费下载链接】TiebaLite 贴吧 Lite 项目地址: https://gitcode.com/gh_mirrors/tieb/TiebaLite 厌倦了官方贴吧应用的臃肿体验和无处不在的广告干扰?贴吧Lite作为一款革命性的第三方贴吧客户…...

终极指南:如何免费快速上手Method Draw在线SVG编辑器

终极指南:如何免费快速上手Method Draw在线SVG编辑器 【免费下载链接】Method-Draw Method Draw, the SVG Editor for Method of Action 项目地址: https://gitcode.com/gh_mirrors/me/Method-Draw 如果你正在寻找一款简单高效的在线SVG编辑器,那…...

终极指南:无需微软账户离线启用Windows Insider预览计划的完整方案

终极指南:无需微软账户离线启用Windows Insider预览计划的完整方案 【免费下载链接】offlineinsiderenroll OfflineInsiderEnroll - A script to enable access to the Windows Insider Program on machines not signed in with Microsoft Account 项目地址: http…...

《离别的最后》的内容入口:收尾场景如何被记住

从内容传播角度看,《离别的最后》的入口在“最后”这个收束动作。它不是笼统告别,而是写到一段关系、一个阶段或一次转身即将落下尾音的时刻。这首歌不适合被写成普通伤感推荐。更准确的角度,是把它放在收尾场景里:删掉草稿、收起…...

SpringBoot+Vue旅游管理系统源码+论文

代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

书匠策AI深度拆解:2025年毕业论文竟然能这样“无痛通关“?|论文科普必看

各位正在被毕业论文反复折磨的同学们,今天这篇文章,我要用最接地气的方式,给你们拆解一个让我直呼"早该有了"的工具——书匠策AI( 官网直达:www.shujiangce.com)。 先说句大实话:写毕…...

歌词滚动姬:重新定义你的歌词制作体验,让每一句歌词都完美同步

歌词滚动姬:重新定义你的歌词制作体验,让每一句歌词都完美同步 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 还在为制作LRC歌词而烦恼吗&a…...

书匠策AI降重降AIGC实测:论文圈的“消音器“到底有多猛?官网www.shujiangce.com深度拆解

各位还在论文泥潭里挣扎的宝子们,今天这期内容可能会让你少熬三个通宵。 我最近收到最多的私信就是:"博主,我查重42%,AIGC检测28%,导师说再改不过就延毕,怎么办?"说实话,…...

Oracle EBS关联公司段的设计逻辑和设计哲学

从设计逻辑 → 核心原理 → 完整配置事例 → 业务分录实例 → 常见坑的完整说明,全部围绕 “关联公司段(Intercompany Company Segment)” 在 EBS R12 里的设计与实现,不绕弯一、关联公司段的 “设计核心逻辑”1. 本质定义关联公司…...