保护Web-API访问

我有一个简单的Web-API可通过HTTP访问,其中一些相应的移动应用程序可以读取该数据。 现在有人反编译了一个应用程序/嗅探了HTTP流量,得到了我的Web API的URL并构建了自己的客户端,就像我的一样。

如何仅为我自己的客户保护对API的访问? 即使想到有人反编译我的应用程序。

服务器和客户端代码更改是一个选项!

服务器和客户端代码更改是一个选项!

首先,你无法完全阻止它(没有法律行动:)。 使用SSL / TLS,这将有助于嗅探可能性。

如果直接从您的服务器下载该应用程序(而不是通过应用程序商店/第三方),您可以更多地保护它。 当用户下载应用程序时,请确保用户已通过身份validation,生成密钥,将其包含在应用程序中,并在与该用户的所有进一步通信中使用它。 黑客/小偷可以模仿它,但是他们需要通过他们的服务器来模拟你的应用程序的登录和下载 – 你可以找到并阻止它。

使用TLS (SSL的后继者)。

简而言之,没有人能够嗅到流量,因为它会被加密。 基本版本仅包括服务器证书 – 创建证书(开始时自签名)并让服务器使用。 会发生什么(我不会进入握手细节):

  • 客户端发送请求
  • 服务器使用其公钥进行响应
  • 客户端生成对称密钥(使用AES或3DES),使用服务器的公钥(RSA)对其进行加密,并将其发送到服务器
  • 服务器解密对称密钥(只有服务器,拥有私钥,可以解密)
  • 通信被继续,每个消息(请求/响应)都被安全传输的密钥加密

其中大部分是由您将使用的API处理的,但知道事情是如何发生的很好。

如何validationWeb请求?

如果除非通过HTTPS(这将是安全的)发送流量,否则基本的HTTP身份validation显然是不够的。

还有很多其他方法 – 基于挑战的机制(例如摘要式身份validation),客户端证书和SSL。

它真的是一个问题,哪个解决方案的痛苦最小 – SSL证书需要花钱,除非你设置了你的证书颁发机构(只要你不期望世界接受你的证书那么它很简单),写代码来实现基于共享秘密的挑战/哈希。

或者只是将URL访问(通过.htaccess)限制为一组固定的IP地址(可选择使用IPSECvalidation)。

简短回答:这是军备竞赛的开始。 您可以在“对手”进行逆向工程和重新开发时进行模糊处理和保护,或者您可以将精力集中在改进客户端软件上,以至于用户宁愿使用您的软件而不是“对手”软件。 我认为,如果您的客户是更好的工具,那么您的用户将使用您的客户。 如果您的竞争对手比您做得更好,请注意。

更长的答案:当下载每个客户端时,生成客户端x.509证书,使用CA密钥签名。 将Web服务器配置为要求并validation每个请求的客户端证书。

您的一个合法用户可能会将您的客户证书提供给您的对手。 他们可能会将一个,十个,一千个不同的合法获得的证书烘焙到他们的软件中,但是当您发现它们时,您可以删除每个人(将密钥发布到您的Web服务器在validation客户端时使用的证书撤销列表)。 。 然后处理在密钥停止工作时感到沮丧的各个最终用户。