欺骗(Spoofing):伪装成某人;干预(Tampering):将不希望被修改的数据、消息或设置改掉;否认(Repudiation):拒绝承认做过的事;信息泄露(Information disclosure):将你希望保密的信息披露出来;拒绝服务(Denial of service):阻止用户访问信息和服务;越权(Elevation ofprivilege):做了你不希望他能做的事。
OWASP API 安全性十大威胁:对象级别授权中断:对于未使用适当级别的授权保护的 API 对象,可能会因为较弱的对象访问标识符而容易发生数据泄漏和未经授权的数据操作。例如,攻击者可以利用一个可迭代的整数对象标识符。用户身份验证中断:身份验证机制的实现通常不正确或缺失,使得攻击者可以利用实现缺陷来访问数据。 过多的数据暴露:恶意行动者会试图直接访问 API(可能通过重播有效请求),或者嗅探服务器和 API 之间的流量。对 API 操作和可用数据的分析可能会为攻击者生成敏感数据,而这些敏感数据并没有展示在前端应用程序中,也没有被前端应用程序使用。 缺少资源和速率限制:缺少速率限制可能会导致数据外泄或对后端服务的成功 DDoS 攻击,进而导致所有使用者的服务中断。 功能级别授权中断:具有不同层次结构、组和角色的复杂访问控制策略,以及管理功能和常规功能之间不明确的分离,都会导致授权缺陷。通过利用这些问题,攻击者可以访问其他用户的资源或管理功能。 大量分配:如果一个 API 提供的字段超过了客户端对给定操作的需求,攻击者可能会注入过多的属性来对数据执行未经授权的操作。攻击者可以通过检查请求和响应或其他 API 的格式来发现未记录的属性,或进行猜测。如果你不使用强类型的编程语言,则此漏洞尤其适用。 安全配置错误:攻击者可能会试图利用安全配置错误漏洞,例如:缺少安全强化措施、启用了不必要的功能、不必要地向 Internet 开放了网络连接、使用了弱协议或密码、可能允许未经授权地访问系统的其他设置或终结点。 注入:接受用户数据的任何终结点都可能会受到注入攻击。示例包括但不限于:命令注入,其中恶意行动者试图更改 API 请求以在托管 API 的操作系统上执行命令;SQL 注入,其中恶意行动者试图更改 API 请求以针对 API 依赖的数据库执行命令和查询。 资产管理不当:与不当的资产管理相关的漏洞包括:缺少适当的 API 文档或所有权信息、旧版 API 过多,可能缺少安全修补程序。 日志记录和监视不足:如果日志记录和监视不足,加上与事件响应的整合缺失或无效,攻击者就能够进一步攻击系统、保持持久性、转向更多系统进行篡改,以及提取或销毁数据。大多数违反行为研究表明,检测到违反行为的时间超过 200 天,通常是由外部方而不是通过内部流程或监视方式检测到的。
5.API协议
SOAP:简单对象访问协议(Simple Object Access Protocol,SOAP),它是广泛使用的最古老的以 Web 为中心的 API 协议。SOAP 于 1990 年代后期推出,是最早设计用于允许不同应用程序或服务使用网络连接以系统方式共享资源的协议之一。SOAP 代表简单对象访问协议,是一种基于 XML 的消息传递与通信协议。必须创建 XML 文档才能进行调用,而 SOAP 所需的 XML 格式并不完全直观。这就会使得调用和调试变得困难,因为调试需要解析长字符串的复杂数据。另一方面,SOAP 依赖于标准协议,尤其是 HTTP 和 SMTP,并为 Web 服务提供数据传输。SOAP 的整个消息都是被写在 XML 中的,因此它能够独立于各种语言在所有操作系统上都可用。 REST:表述性状态传递(Representational State Transfer),由Roy Fielding在2000年的一篇论文中引入,其目标是解决SOAP的一些缺点。REST是基于 HTTP 协议的 Web 标准架构,REST相比于SOAP更灵活,因为它支持多种数据格式,而不需要 XML。遵循REST架构约束的Web API 被称为RESTful API。对于开发人员来说,RESTful 架构是理解 API 功能和行为的最简单工具之一。它不但能够使得 API 架构易于维护和扩展,而且方便了内、外部开发人员去访问 API。REST与SOAP又有着根本的区别,SOAP是一种协议,而REST是一种架构模式。这意味着RESTful Web API没有官方标准。只要API 符合RESTful系统的6个导向性约束,就算作RESTful API:客户端/服务器架构、无状态、可缓存性、分层系统、统一接口、按需代码(可选)。 JSON-RPC:JSON-RPC,是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过 JSON 为主。相较于一般的 REST 透过网址(如 GET /user)调用远程服务器,JSON-RPC 直接在内容中定义了欲调用的函数名称(如 {"method": "getUser"}),这也令开发者不会陷于该使用 PUT 或者 PATCH 的问题之中。 gRPC:gRPC 是一个开源 API,也属于 RPC 的范畴,是一个高性能,开源和通用的RPC框架,基于Protobuf序列化协议开发,且支持众多开发语言。面向服务端和协议端,基于http/2设计,带来诸如双向流,流控,头部压缩,单TCP连接上的多路复用请求等特性。这些特性使得其在移动设备上表现的更好,更省电和节省空间。在gPRC里客户端可以向调用本地对象一样直接调用另一台不同机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。