登录服的设计 -- 功能需求

原创 2007年09月15日 10:34:00

  正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。

  想象一下帐号验证的实现方法,最容易的那就是把用户输入的明文用帐号和密码直接发给登录服,服务器根据帐号从数据库中取出密码,与用户输入的密码相比较。

  这个方法存在的安全隐患实在太大,明文的密码传输太容易被截获了。那我们试着在传输之前先加一下密,为了服务器能进行密码比较,我们应该采用一个可逆的加密算法,在服务器端把这个加密后的字串还原为原始的明文密码,然后与数据库密码进行比较。既然是一个可逆的过程,那外挂制作者总有办法知道我们的加密过程,所以,这个方法仍不够安全。

  哦,如果我们只是希望密码不可能被还原出来,那还不容易吗,使用一个不可逆的散列算法就行了。用户在登录时发送给服务器的是明文的帐号和经散列后的不可逆密码串,服务器取出密码后也用同样的算法进行散列后再进行比较。比如,我们就用使用最广泛的md5算法吧。噢,不要管那个王小云的什么论文,如果我真有那么好的运气,早中500w了,还用在这考虑该死的服务器设计吗?

  似乎是一个很完美的方案,外挂制作者再也偷不到我们的密码了。慢着,外挂偷密码的目的是什么?是为了能用我们的帐号进游戏!如果我们总是用一种固定的算法来对密码做散列,那外挂只需要记住这个散列后的字串就行了,用这个做密码就可以成功登录。

  嗯,这个问题好解决,我们不要用固定的算法进行散列就是了。只是,问题在于服务器与客户端采用的散列算法得出的字串必须是相同的,或者是可验证其是否匹配的。很幸运的是,伟大的数学字们早就为我们准备好了很多优秀的这类算法,而且经理论和实践都证明他们也确实是足够安全的。

  这其中之一是一个叫做SRP的算法,全称叫做Secure Remote Password,即安全远程密码。wow使用的是第6版,也就是SRP6算法。有关其中的数学证明,如果有人能向我解释清楚,并能让我真正弄明白的话,我将非常感激。不过其代码实现步骤倒是并不复杂,mangos中的代码也还算清晰,我们也不再赘述。

  登录服除了帐号验证外还得提供另一项功能,就是在玩家的帐号验证成功后返回给他一个服务器列表让他去选择。这个列表的状态要定时刷新,可能有新的游戏世界开放了,也可能有些游戏世界非常不幸地停止运转了,这些状态的变化都要尽可能及时地让玩家知道。不管发生了什么事,用户都有权利知道,特别是对于付过费的用户来说,我们不该藏着掖着,不是吗?

  这个游戏世界列表的功能将由大区服来提供,具体的结构我们在之前也描述过,这里暂不做讨论。登录服将从大区服上获取到的游戏世界列表发给已验证通过的客户端即可。好了,登录服要实现的功能就这些,很简单,是吧。

  确实是太简单了,不过简单的结构正好更适合我们来看一看游戏服务器内部的模块结构,以及一些服务器共有组件的实现方法。这就留作下一篇吧。 

登录模块的设计

最近做完系统登录模块的重构,登录这块的核心在于安全的控制。下面通过本文来总结一下登录模块的设计实现,以及哪些方面需要注意。用户创建 密码保存需要做不可逆加密。即密码不能明文保存且即使是内部技术人员也无...

百万用户级游戏服务器架构设计(1)

服务器结构探讨 -- 最简单的结构   所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及...

关于boost中shared_ptr使用方法的一些例子

1.get() 返回对象指针;use_count() 返回对象的引用计数 #include #include class Foo { public: void print() { ...
  • Agul_
  • Agul_
  • 2012年10月19日 09:28
  • 13366

CSV标准格式解析与libcsv++实现

CSV文件是一种简单的数据表描述文件,其各字段值使用半角逗号分隔。CSV格式有很多变种,即使有一个标准文档RFC4180,各个程序对它的支持也不尽相同。最近利用闲暇时间使用C++实现了RFC4180规...

Mangos源码分析(6):登录服的设计之功能需求

正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。  ...

Mangos源码分析(6):登录服的设计之功能需求

正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。  想象一...

登录服的设计(1) -- 功能需求

正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。 ...
  • limiko
  • limiko
  • 2011年10月09日 12:38
  • 471

软件测试过程中如何区分什么是功能bug,什么是需求bug,什么是设计bug?

问题描述:   测试过程中如何区分什么是功能bug,什么是需求bug,什么是设计bug?   精彩答案:   会员 土土的豆豆:   本期问题其实主要是针对不同方面或纬度上对于...

机房环境动力监控系统功能介绍及设计需求规划和选择

如果需要对机房动力环境监控系统进行一个概要了解的,可以阅读以下文章。   机房环境动力监控系统功能介绍及设计需求规划和选择 在信息化建设中,机房运行处于信息交换管理的核心位置。机房内所有设备必须...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:登录服的设计 -- 功能需求
举报原因:
原因补充:

(最多只允许输入30个字)