使用公共 API 的安全注意事项

信息安全 api 休息 api网关
2021-08-22 15:01:05

我有一个网站,我想使用来自 Zoopla、天气等第三方服务的公共 API。

我想确保我不会使用从第三方服务检索到的数据中的恶意代码/恶意软件。

在使用任何 3rd 方公共 API 时,我应该考虑哪些安全检查/最佳实践?

我正在使用 AWS API 网关。

4个回答

除了其他人提到的内容之外,我建议遵循以下准则:

第三方模式验证 如果第三方发布了 swagger / OpenAPI 模式并且他们已经很好地定义了 API 的结构(例如使用 minLength、maxLength、type 等),请确保您根据他们的模式验证传入的数据。

您自己的模式验证 假设您正在使用传入数据集的一部分,仅提取该数据并验证输入是否与您的期望一致(例如,以度为单位的天气,验证它是一个整数)

对二进制文件使用第三方恶意软件扫描/验证工具 如果您正在获取二进制文件,您可以利用 lambda 函数扫描文件,通过使用 ClamAV 的开源扫描(本文中的内容)或使用 VirusTotal 进行验证(这是一个松弛集成 + lambda + virustotal 的示例

要扩展@mhr@Raimonds-Liepiņš的上述答案

验证数据

仔细验证从公共 API 中提取的所有数据。任何文本或“未知”数据都必须通过安全编码库进行过滤

例如,考虑从公共 API 中提取的天气数据。

  • 温度 - 可接受的温度可以是负数或正数,最多三位数字。如果是三位数字,则第一个数字将始终为1. 请明确点。任何不同的东西都应该出错。
  • 预测摘要文本 - 使用A-Za-z0-9和标准标点符号的基本文本。定义允许的最大文本数量,并为超过该阈值的任何内容产生错误。或者,考虑截断数据并应用...表示此操作的后缀。此数据必须通过安全编码库进行过滤。

遵守速率限制

确保您的客户不会滥用公共 API 上的速率限制。虽然公共 API 可能会有自己的执行方法,但最好是成为一个好公民并保持在门槛之下。

使用 TLS

TLS 提供了许多保护,如下所述。要求使用安全协议(例如TLS 1.2)和强密码。任何更少的东西都应该出错。

您将获得加密连接的所有好处!

  • 通过证书验证确保您直接连接到目标网站。这可以防止:中间人攻击、DNS 劫持、BGP 劫持、域欺骗(为什么 HTTP 不安全?)。
  • 目标网站更安全,因为所有内容都已加载完毕HTTPS一些示例包括防止从 http 发布到 https和混合内容,同时保护登录和 cookie。
  • 众所周知,某些 ISP 会出于广告服务目的而监控连接,而加密会失败。
  • 如果相邻系统受到威胁,您将受到保护。

资料来源:HSTS 是否在专用网络上提供安全优势?

检查 OWASP

由于您的帖子没有包含有关正在使用的框架和使用的数据的具体信息,因此以上是一个通用指南,扩展了已经提供的答案。有关详细信息,请查看OWASP以及他们的备忘单系列主页可能需要一些搜索才能找到您要查找的内容,但非常值得。

这里有一些提示:

  • 检查您使用的第三方 API 是否存在任何重大安全问题
  • 像对待任何用户输入一样对待来自 API 的数据
  • 确保第三方支持 TLS

与使用 API 或接受用户输入无关,最好不要不检查就信任数据。

因此,您应该验证数据是否与您期望的一样。

为了缓解 MITM 拦截和更改数据,您应该使用 TLS(假设您将通过 http(s) 摄取数据)。