如何保护web服务,以便只有我的android应用程序可以使用我的web服务

问题描述:

我们已经构建了一个Android应用程序,该应用程序将POST HTTP请求从Android发送到我的PHP服务器。作为响应,webservice将JSON对象发送到android应用程序以显示结果。如何保护web服务,以便只有我的android应用程序可以使用我的web服务

像服务之一是像

http://mydomain.com/test/weather.php?lat=13.4332&long=80.454 

因为我不是在Android的专家,所以要处理的安全性从PHP Web服务到底。

如何保护我的web服务调用,以便只有我的应用程序可以使用我的web服务。我不希望有人解密apk并获取webservice URL并在定制输出数据后使用它。

我该如何做到这一点?请给我提供一个很好的例子。

+0

看到这个http://shabbirdhangot.wordpress.com/2014/07/12/secure-web-service-url-in-android/ –

请确保您在POST请求中请求额外的字段以检查发件人的ID。在这个领域中,你可以使用一个哈希序列,就像由md5算法生成的哈希序列一样。

所以,在你的Android应用程序,你会使用标识符和一般的字符串生成散列字符串,像这样:

$identifier='Here comes an understandable unique Id for your App user'; 
$common_sequence='Here comes random sequence, the same to be used server-side'; 

$hash_sequence=crypt($identifier . $common_sequence); 

在您的文章,你有这2场:

  • Hash_sequence
  • 用户ID

在你的服务器,你可以重新生成hash_se因为你已经有common_sequence了,还有userId。检查它们是否匹配。

然而,这种解决方案有一些薄弱点,特别是可以多次使用hash_sequence的事实。您可以考虑在生成序列中插入一个时间因子,例如像yyyymmddHHmm,这样序列就会每分钟改变一次。

Crypt()是一个在PHP中生成hash_sequence的函数。然而,你需要一种在你的应用程序中产生类似序列的方法。在这种情况下,一个简单的MD5散列可能就足够了,并且必须有一个Android Dev开发语言中原生的MD5生成器。

最良好的祝愿,

+0

看到这个http://shabbirdhangot.wordpress.com/2014/07/12/secure-web-service-url-in-android/ –

如果你有能力,你应该实现使用HTTPS在您的应用程序,这可以解决许多安全问题。 创建一个自签名服务器SSL证书,并使用Android SDK中的keytool为此目的在您的Web服务器上进行部署。然后创建一个自签名客户端,并将其作为资源部署在您的应用程序中的一个自定义密钥库中(keytool也会生成这个)。将服务器配置为需要客户端SSL身份验证,并仅接受您生成的客户端证书。 oReilly : Application Security for the Android Platform 或 如果它只是您的客户端和服务器,您可以(也应该)不购买任何东西而使用SSL。您可以控制服务器和客户端,因此每个应该只信任一个属于另一个的证书,并且您不需要CA就可以达到此目的.PHP可以通过POST或GET接收数据,甚至可以通过网站浏览器。用来做这件事的方法之一是通过卷曲。 您必须在您的PHP中验证POST或GET所收到的信息,这种语言有很大的能力来解决这些“问题”;看看这部分的PHP官方文档。

假设你正在构建一个登录系统:你也可以在登录页面添加一个带有秘密唯一代码的隐藏元素,它只能发生一次,在会话中保存这个秘密代码,所以,登录脚本在会话中查找对于此代码,与发布到脚本的内容进行比较,应该继续进行。

而且,如果你想获得您的访问者的IP地址:想要

function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

想在这里查找:Encrypt data within mobile app and send to web serviceWeb services: how prevent illegal accesses

+0

看到这个http://shabbirdhangot.wordpress.com/2014/07/12/secure-web-service-url-in-android/ –