我正在开发一个具有客户端-服务器关系的应用程序,但我无法确定确定会话标识符的算法。我的目标是限制冒名顶替者获取其他用户的私人数据。
我正在考虑两种选择:
选项 1:生成一个随机的 32 个字符的十六进制字符串,将其存储在数据库中,并在客户端登录成功后将其从服务器传递给客户端。客户端然后存储此标识符并在以后对服务器的任何请求中使用它,服务器将与存储的标识符进行交叉检查。
选项 2:从会话的开始时间和客户端的登录用户名和/或哈希密码的组合创建一个哈希,并将其用于所有未来对服务器的请求。会话哈希将在第一次请求时存储在数据库中,并针对来自客户端的任何未来请求进行交叉检查。
其他信息:多个客户端可以同时从同一个 IP 连接,并且两个客户端不应具有相同的会话标识符。
问题:关于我对每个选项的担忧(如下),这些选项中哪个是更好的方法?
我对第一个选项的担忧是标识符是完全随机的,因此可以偶然复制(尽管它是3.4 * 10 38中的 1 ),并用于“窃取”一个用户(也需要使用当时的客户)私人数据。
我对第二个选项的担忧是它有一个安全漏洞,即如果用户的哈希密码以某种方式被截获,整个会话哈希可能会被欺骗,并且用户的私人数据可能会被盗。
感谢您的任何和所有输入。