0 前言
全是干货的技术殿堂
https://github.com/Wasabi1234/Java-Interview-Tutorial
1 API安全
1.1 何为API?
与因特网相连的端系统提供了一个应用程序接口(英语:Application Programming Interface,缩写:API;又称为应用程序编程接口)是软件系统不同组成部分衔接的约定。
API规定了运行在一个端系统上的软件请求因特网基础设施向运行在另一个端系统上的特定目的地软件交付数据的方式。
比方说:Alice使用邮政服务向Bob发一封信,邮政服务要求Alice将信放进信封中;在信封的中央写上Bob的全名、地址和邮政编码;封上信封;在信封的右上角贴上邮票;最后将信封丢进邮箱里;邮政服务有自己的“邮政服务API”或一套规则,Alice必须这么遵循,邮政服务才能把信寄给Bob;同理,因特网也有一个发送数据的程序必须遵循的API,使因特网向接收数据的程序交付数据。
由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的可维护性和可扩展性。
1.2 API安全的要素
1.3 API安全的目标
- 机密性( Confientiality )。确保信息只被预期的读者访问
- 完整性( Integrity )。防止未授权的创建,修改和删除
- 可用性( Availability )。当用户需要访问API时, API总是可用的
1.4 常见的API风险
- Spoofing :欺骗。伪装成系统管理员
- Tampering :干预。将不希望被修改的数据、消息或设置改掉
- Repudiation :否认。拒绝承认做过的事
- Information disclosure :信息泄露。将你希望保密的信息披露出来
- Denial of service :拒绝服务。阻止用户访问信息和服务
- Elevation of privilege :越权。做了你不希望他能做的事。
风险与安全机制的对应关系
认证: (欺骗)。确保你的用户或客户端真的是他(它)们自己
授权:(信息泄漏)/(干预)/(越权)
确保每个针对API的访问都是经过授权的
审计: (否认)。确保所有的操作都被记录,以便追溯和监控
流控: (拒绝服务)。防止用户请求淹没你的API。
加密: (信息泄漏)。确保出入API的数据是私密的。
常见的安全机制
注入攻击最为常见
登录安全
基于Token的身份认证
Java最常见实现方式基于cookie和session实现
参考
- 《计算机网络-自顶向下学习法》
- https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
- Spring cloud微服务安全实战