API 管理 |
---|
API 通过 API 管理发布 |
API 在开发人员门户中可见 |
API 只能通过 API 管理网关访问 |
请求 API 时强制执行速率限制 |
对 API 进行更改时会自动维护规范 |
针对标准规范的每次更改验证端点规范 |
规范包含请求和响应的模式 |
请求和响应模式和示例经过格式验证,示例通过模式验证 |
URI |
API 使用 HTTPS(或在特殊情况下使用其他带加密的无状态协议) |
在组织的官方域下发布的 API |
可见域与其他 API 共享(即 API 使用者看到的域?) |
端点深度最多为 2 个资源(示例 /projects/123/tasks/345) |
已应用样式指南中的其他命名样式 |
API 有版本控制 |
版本控制策略最适合所选 API 管理平台和主要 API 使用者?主版本在 URI 中(仅当 API 管理平台不支持基于客户端订阅的版本控制时) |
API 使用无状态处理(无会话,OpenID 连接令牌是可以的) |
没有特殊处理(异步事件) |
HTTP 方法 |
GET -requests 没有请求正文 |
POST 用于创建和更新数据? |
POST 仅以标准方式使用。 |
PUT 用于创建或替换整个资源? |
DELETE 仅用于删除资源? |
HTTP 状态码 |
404 用于错误的 URL |
400 -responses 有特定错误的附加信息(例如缺少必需的属性) |
当 API 使用者使用错误的凭证时使用 401 -response |
403 使用有效但请求 API 使用者无法访问的端点或尝试使用他们不允许执行的操作 |
500 - 当存在 API 使用者无法通过更改请求来解决的内部处理问题时响应 |
500 -responses 具有特定于应用程序的错误代码,但不是关于确切错误(堆栈跟踪或错误文本)的非常清晰的普通消息,这可能会将内部实现暴露给 API 使用者 |
GET: 200 OK 和 items -array 作为空数组 |
GET:204 空响应,正文中没有任何内容 |
POST: 200 OK 更新或提交而不创建新资源 |
201 -response 结合创建资源的标识符 |
DELETE: 204 OK 删除资源成功时 |
本土化 |
带有时区的 UTC 日期和时间格式(ISO 标准) |
与 ISO 标准代码一起使用的语言和国家代码? |
应用其他标准代码? |
如果使用 ISO 标准中的地理坐标? |
有效负载本地化支持或可通过 API 访问的本地化值? |
支持错误消息本地化吗? |
额外的安全性 |
所有端点都至少受到客户端特定 API 密钥的保护,即使它们是公开可用的(反农业)? |
支持 OpenID 连接和 JWT(基于会话的身份验证)? |
防范 CFRS?(允许 API 管理开发者门户作为源,以允许开发者通过门户用户界面试用 API) |
输入是否经过验证? |
输入由使用的编码框架自动验证? |
输出被转义? |
使用的编码框架会自动转义输出吗? |
是否需要在实施前评估加密数据?(特定国家/地区的隐私和其他法律要求和商业机密要求) |
是否已根据评估的需要对传输中的数据和存储中的数据进行加密? |
是否需要在实施前评估消息完整性(通常使用签名和加密的 JWT 令牌作为身份验证和确保完整性)? |
是否已根据评估的需要实施消息完整性? |
UUID 用于标识对象而不是内部 ID? |
安全的直接对象引用,即 URL 中没有敏感信息(如银行帐号、社会保险号、人名等)作为资源名称或查询参数? |
规范包含标准格式的请求和响应示例,API 文档根据规范、模式和示例自动生成 |
POST, PUT: 201 为创建新资源而创建 |
来自客户端的 400 个错误请求,例如缺少必需的查询参数 |
白名单:POST、PUT 和 DELETE 仅适用于 API 使用者可以操作的资源? |
具有最长端点层次结构和多个长值查询参数的 GET 请求不超过 2000 的 URI 长度?(一些老客户端和浏览器可能有这种限制,虽然不是官方限制,新客户端可以很好的处理) |
原文始发于微信公众号(菜鸟小新):API OWASP 标准
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论