【问题标题】:How can I securely send android location data to a server如何安全地将 android 位置数据发送到服务器
【发布时间】:2013-11-13 20:07:50
【问题描述】:

我刚刚开始涉足 Android 开发,目前正在开发一个应用程序,该应用程序的部分功能是每小时更新 GPS 位置。通过将值发布到类似于下面的 php 文件,我设法让应用程序将位置存储在我的数据库中。我无法弄清楚的问题是如何安全地执行此操作,以便仅存储来自我的 android 应用程序的值,而不仅仅是发布到 url 的任何数据。

接收 gps 值的简化 php 文件:

<?php 

require_once 'connect.php';

$imei = $_POST['imei'];
$longitude = $_POST['longitude'];
$latitude = $_POST['latitude'];

$result = mysqli_query($con, "UPDATE `device_location` SET `Longitude` = '$longitude', `Latitude` = '$latitude' WHERE `IMEI` = '$imei'"); 

?>

本质上,任何知道 php 文件的 url 和有效 IMEI 号码的人都可以发布假 gps 值。如何验证 gps 值是否仅来自我的 android 应用?

【问题讨论】:

  • 你可以停止在代码中引入那些 sql 注入漏洞。
  • 是的,我知道它对 SQL 注入开放。我的实际代码有措施防止这种情况发生,但我认为没有必要将其全部发布,因为它并不是问题的真正重点
  • 你真的不知道如何防止sql注入。对不起。或者你有一个很好的理由(相信我你没有)你正在使用一个古老而过时的数据库 API。
  • 简短回答:你不能。这已在其他地方得到解答。您可以让某人非常非常难以弄清楚您是如何交换数据的。下面的答案为您提供了一个很好的起点——硬编码的共享密钥(尽可能地混淆它)、从您的网络应用程序获得的安全令牌,以及可能是所提交数据的校验和或摘要。所有这些都可以通过对您的应用程序进行逆向工程来回避。我们的想法是让它变得如此困难,以至于大多数人都不会尝试......并在你知道它已被破坏的那一刻改变机制。

标签: php android security


【解决方案1】:
  1. 您可以在服务器的应用程序代码中使用硬编码的字符串 在android中,不要与任何人分享。
  2. 如果您想增加安全性,您可以创建一个由您自己或任何在服务器中生成 GUID(令牌)的库生成的字符串,因此当用户在 android 应用程序中进行身份验证时,将字符串保存在数据库中带有过期时间(表中的一列,然后验证请求完成时令牌是否有效)。令牌应该在来自 android 应用的每个请求中发送,当用户完成会话时,令牌应该被删除,所以当他再次进行身份验证时,获取另一个令牌。

【讨论】:

    【解决方案2】:

    一种方法是在用户登录到您的应用程序时生成一个随机字符串用作访问令牌。将此字符串保存在您的数据库中,并使用此字符串进行所有未来的 API 调用。然后,您的服务器端代码可以通过在数据库中查找访问令牌来检查访问令牌是否有效。如果有效,则继续请求。

    【讨论】:

    • 我认为这是个好主意,但访问令牌不需要存储在设备上吗?这可能意味着有人可能能够对应用程序进行逆向工程并检索令牌
    • 令牌存储在数据库服务器端。它也可以设置为在设定的时间段后过期,然后可以请求新的。为了最初获得令牌,用户必须通过您的登录过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多