带有PHP服务器通信的Android App

时间:2014-04-01 23:27:36

标签: php android security

我尝试用一​​个简单的例子来演示我的问题:我在Android上有一个小应用程序,用户可以登录并保持登录状态。因此我知道用户ID并将其存储在智能手机上

现在我的服务器上有一些用户特定的条目,它们会不时更改。我以某种方式下载它们,以便这些条目在应用程序中本地可用,但显然只有登录用户的相关条目。

如何安全地做到这一点?

我可以设置一个PHP脚本,它将具有指定ID的用户的条目作为JSON-Data-array。但是如何使它足够安全,以便没有人可以利用脚本,例如直接从浏览器中调用它?我的意思是我可以做类似的事情:

<?php
// check and validate $_GET['user_id']
...

// select all entries for this id:
$mysql->fetch('...');

// return as JSON:
echo json_encode($rows);
?>

然后从APP向具有指定user-id的服务器发送HTTP请求。但我必须确保没有其他方法可以通过这种方式检索数据。

其次:我必须确保没有人能够以这种方式利用Android应用程序,他将存储的用户ID修改为自定义指定的用户ID,然后使用该应用程序检索不同用户的数据。这意味着,必须以任何方式改变当前登录用户的本地存储用户ID。 怎么做?


好的,正如wtsang02回答:在APP的android-storage中本地存储密码(可能是哈希/盐渍)和用户ID:我看到以下优点:

  1. 当用户尝试以任何(黑客/黑客)方式修改本地存储的用户ID时,他将无法从服务器检索不同用户(不同的用户ID)的信息,因为他显然没有&# 39;不知道其他用户ID的密码。
  2. 当有人通过我们应用的主页更改密码时,他需要在应用内登录,因为存储的密码不再与在线数据库中的密码匹配。
  3. 我可以使用上面发布的PHP脚本,而无需将其隐藏在直接浏览器调用中,例如(###)。因为直接来自浏览器的每次调用都不会简单地为具有特定用户ID的用户生成数据库条目,因为您需要知道密码本身(然后在以下情况下检索数据将是合法的。任何经过身份验证的方式,但用户还需要知道saltedPassword是如何精确计算的(散列函数,盐,迭代次数等)。
  4. (###)

    // check and validate $_GET['user_id'] and $_GET['saltedPass']
    ...
    if(correctCredentials()) {
      // select all entries for this id:
      $mysql->fetch('...');
    
      // return as JSON:
      echo json_encode($rows);
    }
    

    -------&GT;但仍然存在一个大问题:当我在android应用程序存储中本地存储用户ID时,用户是否真的可以以任何方式修改它?我认为本地安卓存储将安全并限制为特定应用程序使用!

    提前致谢

1 个答案:

答案 0 :(得分:2)

让我们先回答第二个问题。

  

我必须确保没有人可以利用Android应用程序   他修改存储的用户ID

的方式

这不起作用,因为用户方面的任何事情,你都无法信任。他们无论如何都可以修改它。

现在作为您的第一个问题,为什么不在电话中本地存储您的用户ID和密码。每次需要检索数据时,都会将用户标识和密码传递给服务器进行验证。这样,用户是否修改了用户ID或密码并不重要。作为普通用户,如果您将密码存储在本地,他们将无需更改密码并再次重新登录。

更新:

任何本地存储都不安全。任何有根设备都可以查看/编辑应用程序具有的任何文件。非root设备无法查看。但是,您为那些有根植物的设备或试图破坏您的应用的人添加了安全度量,因此您无法将此百分比的设备视为安全。

正如评论指出的那样,如果发送密码,请使用POST而不是GET。