保护Web-API访问

时间:2010-06-28 08:27:17

标签: java php security api

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

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

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

4 个答案:

答案 0 :(得分:3)

  

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

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

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

答案 1 :(得分:2)

使用TLS(SSL的后继者)。

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

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

大部分内容都是由您将使用的API处理,但最好知道事情是如何发生的。

答案 2 :(得分:2)

如何验证网络请求?

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

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

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

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

答案 3 :(得分:1)

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

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

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