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


How to secure webservice so that only my android app can use my webservice

我们已经建立了一个android应用程序,POST HTTP请求从android到我的PHP服务器。作为响应,webservice发送JSON对象给android应用来显示结果。

其中一个服务是like

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

因为我不是android方面的专家,所以我想从PHP端处理webservice的安全问题。

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

我怎样才能做到这一点?请给我提供任何好的例子。

如果可以的话,你应该在你的应用程序中实现HTTPS的使用,这可以解决许多安全问题。为此目的,创建一个自签名服务器SSL证书,并使用Android SDK中的keytool部署到web服务器上。然后创建一个自签名客户机,并将其作为资源部署到应用程序中包含的自定义密钥存储库中(keytool也会生成该密钥存储库)。将服务器配置为要求客户端SSL身份验证,并且只接受您生成的客户端证书。oReilly: Android平台的应用安全或如果只有您的客户机和服务器,您可以(也应该)使用SSL,而无需购买任何东西。您控制服务器和客户端,因此每个都应该只信任一个证书,一个属于另一个,您不需要ca为此目的。php可以通过POST或GET从您的站点甚至internet浏览器接收数据。其中一种方法是通过curl。你必须在你的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;
}

你想要查看这里:加密数据在移动应用程序和发送到web服务和web服务:如何防止非法访问

确保在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);

在你的POST中你有两个字段:

  • Hash_sequence
  • UserId

在您的服务器中,您可以重新生成hash_sequence,因为您已经有common_sequence,以及userId。检查它们是否匹配。

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

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

祝福,