【问题标题】:How do I protect my MySQL database/PDO PHP scripts from abuse (inside Android app)?如何保护我的 MySQL 数据库/PDO PHP 脚本免受滥用(在 Android 应用程序内)?
【发布时间】:2012-06-19 08:13:43
【问题描述】:

我使用 MySQL 和 PDO PHP 脚本来维护用户数据库和高分数据库。 当用户在 Android 应用中获得新的高分时,我将其发送到服务器:

https://domain.com/phpscript.php?user=username&newhighscore=highscore

在这里用户名和高分是变量。每个网络浏览器都可以访问此 URL。如果有人反编译我的应用程序,他们将知道我的数据库位于何处,并且可以伪造他们的高分。对 url 进行混淆和加密可能不是一种选择,因为它们总是可以逆转的。

有什么方法可以保护这些 URL,以便只有我的 Android 应用可以访问这些页面,而不仅仅是任何浏览器?

【问题讨论】:

  • 你能多描述一下Obfuscation and encryption for the url is probably not an option since they can always be reversed.是什么意思吗?
  • @dark crow 在我的 Android 应用程序中,我可以将 url 编码为 base64 或使用 AES 加密,但我也必须将密钥存储在应用程序的某个位置。反编译我的应用程序的人仍然可以反向获取真实的 url。
  • 你为什么不使用这里描述的 SSL blog.crazybob.org/2010/02/…
  • @dark crow,我已经在使用 SSL (https)。
  • 只放 (https) 并不意味着 SSL。

标签: android mysql security pdo


【解决方案1】:

如果您只需要调用https://domain.com/phpscript.php?user=username&newhighscore=highscore 就可以更新用户的最高分,那么您就陷入了困境。

您需要某种身份验证 - 这可能是您所说的“只有我的 Android 应用可以访问这些页面”的意思,这里有一些想法:

  • 在你的应用程序第一次启动时调用另一个脚本来促进一些令牌的交换。将此令牌存储在您的应用程序和服务器端数据库中,并将其用作验证令牌,例如https://domain.com/phpscript.php?user=username&newhighscore=highscore&salt=abc&auth=xyz abc 是随机盐,xyz 类似于 hash(encrypt("user=username&newhighscore=highscore",key=token,iv=salt)+salt)

  • 将手机 ID 用作身份验证方案的一部分

【讨论】:

  • Store this token in your app - 这真的安全吗?至少不再可能滥用其他人的数据,但是有没有简单的方法可以从应用程序中检索此令牌?你会以哪种方式存储它?共享偏好? --edit-- 这也可以防止重新安装或多个设备,对吗?作为新安装或其他设备生成新令牌。
  • 没有什么是真正安全的。你想要的是让它足够安全,这样伪造高分是不值得的。在设备上存储令牌绝对比什么都不做更安全 - 攻击者可能(并且将)能够为该用户提取令牌,但不能为其他用户提取令牌。如果您允许在多个设备上使用相同的用户名进行安装,那么您已经需要一些密码机制 - 或者我可以下载应用程序并说“我的用户名是 XYY,恰好是全球高分持有者的用户名”?
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2020-01-15
  • 2023-02-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多