【发布时间】: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。
-
简短回答:你不能。这已在其他地方得到解答。您可以让某人非常非常难以弄清楚您是如何交换数据的。下面的答案为您提供了一个很好的起点——硬编码的共享密钥(尽可能地混淆它)、从您的网络应用程序获得的安全令牌,以及可能是所提交数据的校验和或摘要。所有这些都可以通过对您的应用程序进行逆向工程来回避。我们的想法是让它变得如此困难,以至于大多数人都不会尝试......并在你知道它已被破坏的那一刻改变机制。