我尝试用一个简单的例子来演示我的问题:我在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:我看到以下优点:
(###)
// 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时,用户是否真的可以以任何方式修改它?我认为本地安卓存储将安全并限制为特定应用程序使用!
提前致谢
答案 0 :(得分:2)
让我们先回答第二个问题。
我必须确保没有人可以利用Android应用程序 他修改存储的用户ID
的方式
这不起作用,因为用户方面的任何事情,你都无法信任。他们无论如何都可以修改它。
现在作为您的第一个问题,为什么不在电话中本地存储您的用户ID和密码。每次需要检索数据时,都会将用户标识和密码传递给服务器进行验证。这样,用户是否修改了用户ID或密码并不重要。作为普通用户,如果您将密码存储在本地,他们将无需更改密码并再次重新登录。
更新:
任何本地存储都不安全。任何有根设备都可以查看/编辑应用程序具有的任何文件。非root设备无法查看。但是,您为那些有根植物的设备或试图破坏您的应用的人添加了安全度量,因此您无法将此百分比的设备视为安全。
正如评论指出的那样,如果发送密码,请使用POST而不是GET。