2010-06-28 101 views
3

我有一个简单的web-API可通过HTTP访问,其中一些相应的移动应用程序正在读取该数据。现在有人反编译应用程序/嗅探HTTP流量,将网址提供给我的Web API并构建自己的客户端,就像我的一样。保护web-API访问的安全

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

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

回答

3

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

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

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

2

使用TLS(SSL的后继者)。

总之,没有人能够嗅探流量,因为它会被加密。基本版本只包含一个服务器证书 - 创建一个证书(自签名开始)并让服务器使用。会发生什么事(我不会去到握手细节):

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

大部分情况都是由您将使用的API处理,但很高兴知道事情是如何发生的。

1

简答:这是军备竞赛的开始。您可以在您的对手进行反向工程和重新开发时混淆和保护,或者您可以专注于改进客户端软件,以使用户宁愿使用您的软件而不是您的“对手”软件。我认为,如果你的客户是更好的工具,那么你的用户就会使用你的客户。如果您的竞争对手比您做得更好,请注意。

较长的答案:每下载一个客户端时,生成一个客户端x.509证书,用一个CA密钥签名。配置您的Web服务器以在每次请求时要求并验证客户端证书。

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

2

如何验证Web请求?

如果除非通过HTTPS(这将是安全的)发送流量,否则存在流量被嗅探的风险,基本的HTTP认证显然是不够的。

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

它的确是一个问题,哪个解决方案造成的痛苦最小 - 除非您设置了您的证书颁发机构(只要您不希望世界接受您的证书,那么它相当简单),SSL证书就会花钱,编写代码以实现基于共享秘密的挑战/散列。

或简单地将URL访问(通过.htaccess)限制为一组固定的IP地址(可选使用IPSEC进行验证)。