【问题标题】:How can I protect an HTTP REST API from malicious use?如何保护 HTTP REST API 免受恶意使用?
【发布时间】:2012-11-18 12:09:52
【问题描述】:

我们正在与第 3 方一起开发 iPhone 应用程序。该应用程序将通过 HTTP 从 ASP.NET WebAPI 请求数据。大多数情况下,这些请求是只读的,没有副作用,但其中一些允许用户更改数据或发送电子邮件。如何保护 API 不被未使用我们应用程序的用户调用?包含一个简单的密码似乎无效,因为任何有权访问该应用程序的人都可以轻松嗅探它。

是否有标准机制或技术来防止此类问题?

编辑: 添加一个简单的密码来请求然后对 API 使用强制 HTTPS 是否足够?如果使用 HTTPS,也许添加密码并不能提高安全性?

【问题讨论】:

  • 您需要在 REST 服务的身份验证/授权中执行此操作。您可以在其中获取测试用户是否是经过身份验证的用户。

标签: jquery api security asp.net-web-api


【解决方案1】:

如果您正在寻找重量级的 xml 解决方案,您可以使用自己的 CA 设置一些内部 PKI。并为每个用户颁发一个证书(存储在他们的手机上),然后您可以查看XAdES。并为展开或封装类型签名创建验证逻辑。在过滤器中,在解析之前剥离签名,或者在给定的方法中手动执行此操作。当然还有用于传输保护的 SSL/TLS。

【讨论】:

    【解决方案2】:

    一个简单的解决方案是在创建每个用户的帐户时为其生成一个随机 api 密钥,然后在连接时将其存储在应用程序的数据中。

    然后,每个请求都必须使用 api 密钥进行签名。

    它可以让您确定请求是从连接到您的应用的设备发送的,并帮助您记录请求并了解哪个用户调用了哪个端点。

    当然,如果用户在 wifi 网络上,他可能成为中间人的受害者,如果你不使用 https,他的 api 密钥可能会被泄露。

    如果您不希望 api 密钥在每个传出请求中“可见”,您可以传输用户 ID 和签名,该签名将是请求参数和 api 密钥的串联,散列到 md5 中。 REST API 必须执行相同的操作并在允许请求之前检查签名是否存在差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2015-11-05
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多