来自唯一整数的唯一字母数字字符串? (屏蔽游戏服务器中的ID?)

时间:2012-01-22 14:49:33

标签: web-services

我有一个多人手机游戏,它是由sql数据库支持的。每个游戏都会获得一个ID,它只是一个自动增量字段。我可以用以下网址查找游戏:

http://www.example.com/gameId=123

目前玩家无法看到该网址,但我正在考虑将其显示出来,以便用户可以邀请朋友,让非玩家在玩游戏时(通过浏览器)在游戏中观看一个原生应用程序)。

但是我将游戏ID放在公开场合的事实似乎是一个坏主意。如果有人猜到一个端点说要删除一个游戏,那么他们可能会在知道ID时做坏事(当然我的端点受用户身份验证保护,但仍然如此)。

大多数服务都会屏蔽此类ID,我应该发送一个网址,如:

http://www.example.com/gameId=maskedIdAbc

然后我的游戏服务器必须将该ID转换为我数据库中的相应ID?

不确定这是否过度。如果没有,基于唯一整数生成唯一字母数字字符串的好方法是什么?

由于

3 个答案:

答案 0 :(得分:0)

如果整数范围不大,您可以使用唯一的随机字母字符串定义表格。我认为这是最好的方式。

答案 1 :(得分:0)

为什么不将游戏的主键从增量ID更改为GUID?游戏已经过时,你应该可以通过多个步骤到达那里。将Guid添加为字段,并允许通过ID或GUID查找游戏。更新您的客户端以使用GUID,逐步淘汰ID,最后将主键更改为GUID。

你可以散列int,甚至使用hex,但它可以破解。更好地实现一个完整的修复,如果你不想使用GUID,你可以实现你存储在每个数据库记录中的等效随机字符,但是为什么在GUID通常由数据库支持Nativity时会遇到麻烦。

答案 2 :(得分:0)

我有类似的情况,并且不想在网址中使用gameID(在此处使用您的示例),因为有人可以使用任何数字。我仍然可以使用ID,但需要添加额外的检查来授权用户。

您可以使用UUID生成gameID,但我发现这个问题很少; - 非数字ID会对性能产生影响 - 如果这是主键,并希望在其他表格中使用它作为FK,那么

我做了什么; 除了我的表中的gameID,我添加了另一列WebGameID varchar(32)。生成游戏ID后,更新WebGameID = MD5(gameID)。这将是特定gameID的唯一32字符串。有了这个,我可以使用gameID作为内部密钥,而FK的广告只使用WebGameID作为URL来限制用户操作。