【发布时间】:2019-09-03 00:57:53
【问题描述】:
您好,我正在为一个移动应用程序规划我的服务器登录安全性,并记录了一个简单的计划。它看起来是否安全,是否可以通过任何方式进行改进?提前致谢。
客户端首次登录
- 从客户端获取设备 ID 并发送到服务器。
- 使用新用户 ID 在服务器和用户帐户上创建一个 MD5 salt。
- 将加盐与设备 ID 和用户 ID 连接以创建加盐密码。
- 创建加盐密码的 MD5 哈希,并将哈希密码存储在数据库中。
- 将用户 ID 和 Salt 返回给客户端。
客户再次登录或提出一般请求
- 使用从服务器接收到的 salt 并与设备 ID 和用户 ID 连接,使用客户端生成的 MD5 哈希向服务器发送请求。同时以纯文本形式发送设备 ID 和用户 ID。
- 验证数据库中存储的用户设备ID和用户ID与客户端发送的相同。
- 验证用户发送的 MD5 哈希是否与该用户设备的数据库中存储的哈希相同。
- 验证并继续处理请求。
【问题讨论】:
-
我建议只使用经过验证的库来提供此功能。你会重新发明轮子,认为你让事情变得安全,但我怀疑我们中的大多数人会比这些图书馆的一群贡献者更聪明:)
-
@jcuypers 我很欣赏你的观点。我正在使用 PHP 和 Unity,我必须自己在客户端做大部分的腿部工作。我也想学我能学的。您对此类库有什么建议吗?
-
我更喜欢 Angular。无论如何,我可以为您提供这个很好的链接来很好地解释这个主题:crackstation.net/hashing-security.htm。它列出了一些 PHP 库,但我无法评论它们。
-
@jcuypers 这是一个非常好的链接。谢谢,我很难在 G 搜索中遇到这种情况。看来我离建议不远了。我存储的数据对安全不敏感,因此我目前对使用本文中的建议感到满意。我只想停止在游戏中作弊。主要收获是不要使用 MD5 进行散列,也不要在每个请求中发送散列,而是使用存储在数据库中的盐重建服务器上的散列并发送密码,在我的情况下将是设备 ID站立。我可以看到用户密码的一个很好的理由。谢谢