java - 应用程序、远程脚本和安全/混淆

标签 java android algorithm security

我将构建一个虚构的应用程序来构建我的问题。

我编写了一种寻宝应用程序,如果用户访问城镇周围的多个位置,他们将获得奖品。实际上,该应用程序会获取他们当前的纬度/经度并检查其与“宝藏位置”列表的接近程度,如果他们在任何宝藏位置的 10 米范围内,他们会收到通知。

然后,该应用程序将向基本上插入数据库的远程脚本执行 http 发布。 post 参数将是设备的 uuid 和他们访问的位置。

攻击者可以很容易地监视 wireshark 并获取脚本的名称和参数。他们可以更进一步,反编译 apk 并获得其他东西,例如任何散列/混淆。然后他们可以随心所欲地使用 curl 随意发布,对于非作弊者来说游戏将被毁掉。这是一个从来没有真正解决过的问题,因为在我编写的所有应用程序中,总是有不敏感的数据,我不介意将其暴露给公众。

我该怎么办?

最佳答案

您最好的想法就是以安全的方式发送数据。无论使用何种方法,使用 HTTPS 都是更好的选择。这有效地防止了窃听,它是互联网上任何安全通信背后的基础技术。

除了与服务器通信的协议(protocol)之外,仍然存在不安全因素。基本上,可以使用三种方法来克服这些问题。

  1. 玩家的位置可以定期发送到服务器。如果它们距离其中一个区域足够近,服务器会做出响应。也许服务器可以包含足够的智能来知道从 A 点到 B 点需要时间。
  2. 一次可以将一个位置发送到应用程序。还可以上传用户的轨迹,以验证位置是否正确。
  3. 位置可以通过单向函数发送给程序。然后可以将真正的答案发送到服务器。这样做的问题是需要发现确切的位置才能返回相同的哈希结果。但是,由于 GPS 坐标往往只能精确到几米,而且不会给出无关紧要的数字,因此可以在当前位置附近测试多个值。单向函数必须需要一些时间才能以有效的方式进行计算,否则对于坏人来说,简单地测试城市中的每一平方米以找出可行的方法将是微不足道的。

从安全的角度来看,最好的方法是第一个,因为应用程序在到达该位置之前永远不知道它应该去哪里。当然,这会不必要地多次 ping 服务器。

关于java - 应用程序、远程脚本和安全/混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465850/

相关文章:

algorithm - igraph 优先附件有向图是无环的吗?

algorithm - 蕴涵图赋值

java - 在不启动事务的情况下通过 Hibernate 对 MySQL 数据库运行查询的含义是什么?

android - 是否可以每隔 x 分钟自动打开 Android 应用程序?

java - 来自 json 对象的 Retrofit 中的 boolean 值

java - 在 Java 中查找第一个没有重复的字符时出错

java - 线程本地;是不是和每次都创建一个变量的副本一样?

java - 使用序列化对象列表

java - 使用 Java 在 Spark Data Frame 中添加空值列

android - 在Android Studio上导入项目的步骤(基于Gradle)