security - 我如何保护私有(private) API

标签 security api rest

我正在开发一个 REST API,供我正在编写的移动应用程序使用,主要是为了与数据库进行通信。

移动应用程序调用如下 URL:

example.com/mobileapi/getinfo

并在每次调用时携带一定的 POST 负载。

我不担心用户身份验证等。

但是,我担心的是,如果有人将移动应用程序与 Fiddler 或 Wireshark 等网络监控工具一起使用,他们可能会记录所有被调用的 URL 以及所有 POST 参数。这些信息足以创建他们自己的使用我的 API 的应用程序。

如何防止这种情况发生?我考虑将 Key 硬编码到我的应用程序中,并将其作为 POST 参数包含在每个请求中,但这也将是可见的。

最佳答案

您想要做的是采用相互验证的 SSL,以便您的服务器将仅接受来自您的应用程序的传入连接,并且您的应用程序将仅与您的服务器通信。

这是高级方法。创建自签名服务器 SSL 证书并部署在您的 Web 服务器上。如果您使用的是 Android,则可以使用 Android SDK 中包含的 keytool 来实现此目的;如果您使用其他应用程序平台,也有类似的工具。然后创建一个自签名客户端,并将其部署在应用程序中的自定义 keystore 中,该 keystore 作为资源包含在应用程序中(keytool 也将生成该客户端)。将服务器配置为需要客户端 SSL 身份验证并仅接受您生成的客户端证书。将客户端配置为使用该客户端证书来标识自身,并且仅接受您在服务器上安装的该部分的一个服务器端证书。

如果您的应用程序以外的某人/某物尝试连接到您的服务器,则不会创建 SSL 连接,因为服务器将拒绝不提供您已包含在应用程序中的客户端证书的传入 SSL 连接。

这个问题的逐步解答比这里所保证的要长得多。我建议分阶段执行此操作,因为网络上有关于如何在 Android 中处理自签名 SSL 证书的资源(我不太熟悉如何在其他移动平台上执行此操作),包括服务器端和客户端。我的书中也有完整的演练,Application Security for the Android Platform ,由 O'Reilly 出版。

关于security - 我如何保护私有(private) API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8708849/

相关文章:

c# - 如何在 web.config 中引用 DLL?

android - 使用 REST 的用户身份验证

spring - 如何在 Spring Boot 应用程序中禁用 DefaultSecurityFilterChain?

Windows Azure REST API MediaLink

c# - 达到 295 个字符时,Restful 帖子会抛出 400 个无效网址

api - 通过 HTTP API 在 RabbitMQ 中发送持久消息

javascript - 这是有效的 JSON 标记吗?

c# - 从 Web API 在 MVC 中存储 Bearer Token 的位置

security - 服务器上的 CFM 文件被黑客攻击,您是否了解可能发生的情况?

linux - 使用端口 80 (Ubuntu/Linode) 运行 Node.js 时的最佳实践