最好只检查一个用户一台设备,以避免欺诈

问题描述 投票:0回答:6

我开发了一种赌场应用,用户可以在上面赢取真钱。 为了避免欺诈,我们需要检查用户是否同时只使用一台设备。

当我查看有关如何识别设备的 Android 文档时:https://developer.android.com/training/articles/user-data-ids#best-practices-android-identifier:

使用 Firebase 安装 ID (FID) 或私有存储的 GUID 尽可能用于所有其他用例,付款欺诈除外 预防和电话。对于绝大多数非广告用例, 一个 FID 或 GUID 就足够了。

所以医生说:

  • 使用 FID 或 GUID,除了支付欺诈(这是我的情况)
  • 避免使用 IMEI 或 DEVICE_ID 等硬件标识符

那么欺诈的最佳做法是什么?

android security fraud-prevention
6个回答
0
投票

当用户打开应用程序并登录时,您应该向服务器发送一个包含用户 ID 的请求,为该用户分配一个会话 ID,并在用户保持在线期间将映射 {userId: sessionId} 存储在键值存储中.

现在每当用户打开您的应用程序并登录(或已经登录)时,检查该用户的 Id 是否已存在于键值存储中,如果存在,则不允许该会话,否则让该用户登录,当用户离开您的应用程序时,从键值存储中删除该映射。


0
投票

只需向用户询问他的国家 ID,并将其添加为 dp 中的 uid


0
投票

如果不想使用用户设备 ID,您可以使用用户 ID 为用户维护会话,一旦从设备登录,服务器将从设备(如果有)注销它。

为此,您基本上需要一个 API,它将在应用程序的 onResume() 中调用,它会检查应用程序是否仍有会话。如果会话过期,用户将被注销并重定向到登录页面。


0
投票

您如何看待在用户注册流程中创建一些随机 deviceId,例如使用

UUID.randomUUID.toString()
?您将其存储然后在应用程序的私人存储中的设备上加密。 在注册期间,您将其发送到后端以将此 ID 与用户配对。 之后当应用程序调用API时,需要解密存储的deviceId并将其添加到请求头中以进行识别。

有了这个,你就有了一个不能轻易绕过的唯一ID,因为:

  • 它是每个设备随机生成的
  • 在注册期间它与用户配对(并且后端应该将其识别为only deviceIdthis用户在与API通信时被允许使用)
  • 它被加密存储在应用程序的私有内存中(因此欺诈者访问它基本上需要有根或在 Android 上利用一些零日,问题是你是否计划在应用程序中应用任何根检测措施,因为这是弱点)
  • app 仅在调用 API 时解密它(然后应该从内存中删除解密的 deviceId 直到下次使用)

0
投票

您可以在数据库中为所有用户创建像

uniqueDeviceID
这样的字段,当用户使用正确的凭据登录时检查
uniqueDeviceID
是否存在。

如果它存在,这意味着用户已经在某个地方登录,您需要调用该

uniqueDeviceID
的注销操作,并为此登录分配新的
uniqueDeviceID

如果用户点击注销,您需要做的就是从数据库中的用户字段中删除

uniqueDeviceID
。所以下次他/她尝试登录时,ID 将不存在并且会保持循环。


0
投票

检查手机的MAC地址。在全球范围内,它们是独一无二的,将它们链接到他们的帐户,如果它们连接到您自己的基础设施,您可以轻松跟踪它们。

© www.soinside.com 2019 - 2024. All rights reserved.