我正在开发一个REST API,供我正在编写的移动应用程序使用,主要用于与数据库通信。
移动应用程序调用以下URL:
example.com/mobileapi/getinfo
并且每次调用都会携带一些POST有效负载。
我并不担心用户身份验证等。
然而,我担心的是,如果有人使用移动应用程序以及Fiddler或Wireshark等网络监控工具,他们可以记录所有被调用的URL以及所有POST参数。这将足以创建使用我的API的应用程序。
我该怎样防止这种情况?我考虑将密钥硬编码到我的应用程序中,并将其作为每个请求的POST参数包含在内,但这也是可见的。
答案 0 :(得分:9)
您要做的是使用经过相互身份验证的SSL,以便您的服务器只接受来自您应用的传入连接,而您的应用只会与您的服务器进行通信。
这是高级方法。创建自签名服务器SSL证书并在Web服务器上部署。如果您使用的是Android,则可以使用Android SDK附带的keytool来实现此目的;如果您正在使用其他应用程序平台,那么也存在类似的工具。然后创建一个自签名客户端,并将其作为资源在应用程序中包含的自定义密钥库中部署到您的应用程序中(keytool也会生成它)。将服务器配置为要求客户端SSL身份验证,并仅接受您生成的客户端证书。配置客户端使用该客户端证书来标识自己,并且只接受您在服务器上安装的那个服务器端证书。
如果您的应用以外的某人/某些人尝试连接到您的服务器,则不会创建SSL连接,因为服务器将拒绝未提供您的应用中包含的客户端证书的传入SSL连接。 / p>
这是一个循序渐进的答案,比这里所保证的要长得多。我建议分阶段这样做,因为网上有关于如何在Android中处理自签名SSL证书的资源(我不熟悉如何在其他移动平台上执行此操作),包括服务器端和客户端端。我的书Application Security for the Android Platform中还有一个完整的演练,由O'Reilly出版。