我如何保护私有API

xbo*_*nez 4 security api rest

我正在开发一个REST API,供我正在编写的移动应用程序使用,主要用于与数据库通信.

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

example.com/mobileapi/getinfo
Run Code Online (Sandbox Code Playgroud)

并且每次呼叫都携带一定的POST负载.

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

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

我怎么能阻止这个?我考虑将密钥硬编码到我的应用程序中,并将其作为POST参数包含在每个请求中,但这也是可见的.

小智 9

您要做的是使用经过相互身份验证的SSL,以便您的服务器只接受来自您应用的传入连接,并且您的应用只会与您的服务器通信.

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

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

这是一个循序渐进的答案,比这里所保证的要长得多.我建议分阶段这样做,因为网上有关于如何在Android中处理自签名SSL证书的资源(我不熟悉如何在其他移动平台上执行此操作),包括服务器端和客户端端.在我的书中,O'Reilly出版的Android平台应用程序安全性也有一个完整的演练.

  • 我意识到这是一个旧的Q/A,但我有一个问题(假设这个方法仍然有效):是什么阻止有人从已编译的客户端应用程序中删除证书并将其用于自己的目的? (2认同)