一种防止会话重演的方法及系统与流程

文档序号:12949162阅读:120来源:国知局

本发明属于通信技术领域,涉及一种防止会话重演的方法及系统。



背景技术:

现在貌似大多数网站用户认证主要包括两种方式:

一.基于session的用户认证

用户通过服务器的身份验证后,在服务器端生成用户相关的session数据,而将发给客户端session_id存放到cookie中。当客户端需要向服务器请求服务时,在发送至服务器的用户请求中带上session_id。服务器就可以根据session_id验证服务器端是否存在对应的session数据,以此完成用户认证。

二.基于token的用户认证

基于token的用户认证是一种服务器端无状态的认证方式,服务器端不用存放token数据。用户通过服务器的身份验证后,由服务器生成一个token(hash或encrypt,即哈希或加密)发给客户端。客户端可以放到cookie或localstorage中,客户端在发送给服务器的每个用户请求中附上token作为授信凭证,服务端在收到token以后进行授信凭证验证,通过验证后即可确认用户的身份。

上述两种认证方式,主要靠唯一的授信凭证发给客户端,客户端的每次用户请求都附带上session或token来保持、识别授信凭证。虽然每一个客户端上的session或token是唯一的,但是session或token在一定时间内也是固定不变的。在开放网络上,session或token很可能被恶意第三方截取盗用,并且附在自己的恶意请求上,使得恶意第三方可以冒充真正的用户向服务器发送恶意请求,服务器难以识别,威胁网络完全。

于是现有技术中,服务器每次先给客户端分配一个随机数,由客户端根据这个随机数加密或变换session或token信息,来使得客户端每次用户请求的授信凭证不一样。但是,这种技术方案的实现方式中,首先需要服务器产生并保持这个随机数并且将该随机数传送给客户端。因此,如果用于传送这个随机数的传送通道不安全,那么这个随机数仍然有可能被恶意的第三方截取盗用。并且如果第三方用的授信凭证正好就是当时那次的请求内容,服务器端就可能接受请求。这种使用盗用当时的授信凭证及请求,再次发给服务器的重演行为仍无法避免。



技术实现要素:

本发明为了解决上述技术问题,提出一种防止会话重演的方法,其特征在于,包括步骤:

步骤s1,接收用户请求,所述用户请求附带授信凭证;

步骤s2,验证所述授信凭证,验证通过则缓存所述授信凭证并且响应所述用户请求,验证不通过则拒绝所述用户请求;验证所述授信凭证包括授信凭证的重演性验证;

其中,所述重演性验证是指检查缓存中是否存在所述授信凭证,如果存在则所述重演性验证失败,如果不存在则所述重演性验证通过。

作为优选,所述授信凭证包括时效信息;

所述步骤s2中,验证所述授信凭证包括授信凭证的时效性验证;所述时效性验证是根据所述时效信息验证所述授信凭证是否在时效期内,如果所述授信凭证在所述时效期内则所述时效性验证通过,如果所述授信凭证不在所述时效期内则所述时效性验证不通过。

作为优选,所述步骤s2包括:

步骤s2-1,授信凭证的合法性验证,所述合法性验证通过则继续步骤s2-2,所述合法性验证不通过则所述授信验证不通过并且不响应所述用户请求;

步骤s2-2,授信凭证的时效性验证,所述时效性验证通过则继续步骤s2-3,所述合法性验证不通过则所述授信验证不通过并且不响应所述用户请求;

步骤s2-3,授信凭证的重演性验证,所述重演性验证通过则所述授信验证通过,所述合法性验证不通过则所述授信验证不通过并且不响应所述用户请求;

步骤s2-4,缓存所述授信凭证。

作为优选,所述时效信息包括所述授信凭证的形成时间;步骤s2-2包括:

步骤s2-2-1,提取所述授信凭证中的时效信息;

步骤s2-2-2,比较所述授信凭证的接收时间和所述形成时间之间的时间差是否超过所述时效期;如果所述时间差超过所述时效期则所述时效性验证通过,进入步骤s2-2-3;如果所述时间差不超过所述时效期则所述时效性验证不通过。

作为优选,缓存中的授信凭证在缓存时间超过所述时效期后被清除。

作为优选,所述步骤s1之前还包括:

步骤s0,接收用户端验证请求,为通过用户端验证的用户端分配所述授信凭证;

其中,所述授信凭证包括用户端信息。

作为优选,所述授信凭证由所述客户端生成。

本发明还提供了一种防止会话重演的系统,包括客户端和服务器,所述客户端发送附有授信凭证的用户请求至所述服务器以请求所述服务器提供服务;所述服务器对通过授信凭证验证的所述客户端提供服务;其特征在于:

所述授信凭证包括客户端信息、服务器信息、时效信息;

所述服务器包括缓存所述授信凭证的缓存模块和验证所述授信凭证的验证模块;所述缓存模块删除缓存时间超过其时效期的授信凭证;

所述验证模块包括合法性验证单元、时效性验证单元、重演性验证单元,所述合法性验证单元根据所述客户端信息和所述服务器信息验证所述授信凭证是否合法,所述时效性验证单元根据所述时效信息验证所述授信凭证是否有效,所述重演性验证单元在所述缓存模块中检索所述授信凭证是否存在。

作为优选,所述缓存模块缓存通过所述合法性验证的所述授信凭证。

作为优选,所述时效期为20-40分钟。

附图说明

图1是本发明的授信过程示意图。

具体实施方式

以下具体实施例仅仅是对本发明的解释,其并不是对本发明的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本发明的权利要求范围内都受到专利法的保护。

实施例一

如图1所示,一种防止会话重演的系统。

客户端发送附有授信凭证的用户请求至服务器以请求服务器提供服务;服务器对通过授信凭证验证的客户端提供服务。该授信凭证为具有时效期的一次性的授信凭证,包括客户端信息、服务器信息和时效信息

客户端的形式有多种,例如浏览器或者app应用,用户通过客户端浏览器或者客户端app应用进行用户登录,发送用户名和用户密码至服务器。服务器端存储有注册成功的用户的信息,该用户信息包括用户名和用户密码的对应关系。服务器端对用户的登陆请求进行验证身份验证,并为通过身份验证的客户端分配一个唯一的session或者token,客户端将该唯一的session(身份会话)或者token(身份令牌)作为用户的身份认证信息保存起来,但是客户端并不采用该身份认证信息作为授信凭证。

具体的,客户端包括客户端存储模块和授信凭证生成模块。客户端存储模块中存储有用户信息,具体包括:用户名、用户密码、以及服务器分配给该用户的身份认证信息(即session或者token)。授信凭证生成模块基于session或者toekn生成与客户端的请求内容相关的一次性的授信凭证,该授信凭证的时效期为30分钟。

授信凭证生成模块包括第一信息摘要生成单元,第一信息摘要生成单元将用户的请求内容和身份认证信息(即session或者token)合并为第一合并信息,并对该第一合并信息进行摘要运算以获得第一信息摘要。作为优选,本实施例中的摘要运算采用消息摘要算法(例如,messagedigestalgorithmmd5,消息摘要算法第五版)以获得固定长度的第一信息摘要,同时还具有容易计算、抗修改性和强抗碰撞的优点。授信凭证生成模块将由第一信息摘要生成单元得到的第一信息摘要(作为客户端信息)连同用户的用户名(作为服务器信息)和用户的请求时间(即该授信凭证的形成时间,将其作为时效信息)一起作为授信凭证。客户端将由授信凭证生成模块得到的授信凭证连同用户的本次请求的请求内容一起作为用户请求发送给服务器。

服务器包括服务器存储模块、缓存模块、验证模块。服务器存储模块中存储有注册成功的用户信息,该用户信息包括:用户名、用户密码以及为该用户客户端分配的身份认证信息(即session或者token)。缓存模块用于缓存该服务器上已通过授信验证的授信凭证,该缓存模块中的授信凭证的缓存时间为授信凭证的时效期(本实施例中为30分钟)。即对于缓存在其中的授信凭证,如果其缓存时间超过时效期30分钟,缓存模块会将其删除。验证模块用户验证用户请求的授信凭证。验证模块进一步包括合法性验证单元、时效性验证单元和重演性验证单元。其中,合法性验证单元用于检验用户请求的授信凭证是否合法。进一步包括由检索子单元、第二信息摘要生成子单元、匹配子单元。检索子单元根据用户的用户名在服务器存储模块中查找出服务器为该用户端分配的身份认证信息(即session或者token)。第二信息摘要生成子单元将由检索子单元检索到的身份认证信息(即session或者token)和服务器接收到的来自客户端的用户请求中的请求内容合并为第二合并信息,并对该第二合并信息进行摘要运算,此处的摘要运算算法应该与客户端的第一信息摘要生成单元所采用的算法保持一致。例如本实施例中的第二信息摘要生成子单元应采用与第一信息摘要生成单元一致的消息摘要算法第五版。匹配子单元则比较第二信息摘要生成子单元获得的第二信息摘要和附在用户请求的授信凭证中的第一信息摘要是否相同,第一信息摘要和第二信息摘要相同则表示授信凭证合法;如果第一信息摘要和第二信息摘要不同则表示授信凭证不合法,服务器不应响应客户端的用户请求。对于通过了合法性验证的授信凭证,时效性验证单元将比较附在该授信凭证中的用户的请求时间和服务器接收到该用户请求的接收时间之间的时间差是否大于授信凭证的时效期30分钟:如果是,则表示该授信凭证已失效;如果不是,则表示该授信凭证仍有效。对于通过时效性验证的授信凭证,重演性验证单元在服务器的缓存模块中检索该授信凭证是否已经存在,如果存在则表示该用户请求为非真实用户的重演行为,服务器不应响应该用户请求;如果不存在则表示该用户请求为真实的用户请求,服务器应响应该用户请求,授信验证通过,并将该授信凭证缓存起来。

本实施例中,基于上述系统的防止会话重演的方法如下,包括:

步骤s0,客户端发送身份认证请求至服务器,服务器为通过身份认证请求的客户端分配身份认证信息。客户端的形式有多种,例如浏览器或者app应用,用户通过客户端浏览器或者客户端app应用进行用户登录,发送用户名和用户密码至服务器。服务器端存储有注册成功的用户的信息,该用户信息包括用户名和用户密码的对应关系。服务器端对用户的登陆请求进行验证身份验证,并为通过身份验证的客户端分配一个唯一的session或者token,客户端将该唯一的session(身份会话)或者token(身份令牌)作为用户的身份认证信息保存起来。

步骤s1,客户端发送用户请求至服务器,用户请求包括请求内容和授信凭证,授信凭证包括根据请求内容和身份认证信息(即session或者token)生成的第一信息摘要。该授信凭证具有时效期,时效期为30分钟。具体包括:

步骤s1-1,客户端将存储的客户端存储模块中的身份认证信息(即session或者token)和用户本次请求的请求内容合并为第一合并信息;

步骤s1-2,由客户端的第一信息摘要生成单元对由步骤s1-2中得到的第一合并信息进行摘要运算(本实施例中为md5运算,即消息摘要算法第五版)生成第一信息摘要;

步骤s1-3,客户端的授信凭证生成模块将步骤s1-2中得到的第一信息摘要和用户的用户名以及用户的请求时间一起作为授信凭证;

步骤s1-4,客户端发送用户请求至服务器,该用户请求包括了用户本次请求的请求内容和由步骤s1-3得到的授信凭证。

步骤s2,服务器接收来自客户端的用户请求并验证附在用户请求中的授信凭证,验证通过则缓存所述授信凭证并且响应所述用户请求,验证不通过则拒绝所述用户请求。授信凭证的验证包括:

步骤s2-1,合法性验证,服务器的验证模块的合法性验证单元根据用户请求的授信凭证中的客户端信息和服务器信息验证授信凭证是否合法。合法性验证通过则继续步骤s2-2,合法性验证不通过则所述授信验证不通过并且不响应所述用户请求。具体包括:

步骤s2-1-1,合法性验证单元的检索子单元根据用户的用户名在服务器的服务器存储模块中查找与该用户名对应的身份认证信息(即session或者token)。

步骤s2-1-2,合法性验证单元通过第二信息摘要生成子单元根据用户请求中的请求内容和由步骤s2-1-1得到的身份认证信息(即session或者token)生成第二信息摘要。步骤s2-1-2进一步包括:

步骤s2-1-3,合法性验证单元将由步骤s2-1-2得到的身份认证信息和用户请求中的请求内容合并为第二合并信息;

步骤s2-1-4,合法性验证单元通过其第二信息摘要生成子单元对第二合并信息进行摘要运算(本实施例中为md5运算,即消息摘要算法第五版)得到第二信息摘要。

步骤s2-1-5,合法性单元通过其匹配子单元比较用户请求的授信凭证中的第一信息摘要与步骤s2-1-2中得到的第二信息摘要是否相同。如果两者相同则表示第一信息摘要与第二信息摘要匹配,合法性验证通过;如果两者不相同则表示第一信息摘要与第二信息摘要不匹配,合法性验证不通过。

步骤s2-2,时效性验证,验证模块的时效性验证单元根据时效信息验证授信凭证是否在时效期内,如果授信凭证在时效期内则时效性验证通过,如果授信凭证不在时效期内则时效性验证不通过。时效性验证通过则继续步骤s2-3,合法性验证不通过则授信验证不通过并且不响应用户请求。具体包括:

步骤s2-2-1,提取附在授信凭证中的用户的请求时间作为时效信息;

步骤s2-2-2,比较在步骤s2-2-1中得到的请求时间和所述用户请求(即授信凭证)的接收时间之间的时间差是否大于授信凭证的时效期30分钟:如果是,则表示该授信凭证已失效,时效性验证不通过;如果不是,则表示该授信凭证仍有效,时效性验证通过。

步骤s2-3,重演性验证,验证服务器的缓存模块中是否存在相同的授信凭证。重演性验证通过则授信验证通过,重演性验证不通过则授信验证不通过并且不响应用户请求。

步骤s2-4,缓存通过授信凭证验证的授信凭证。只有上述三步验证均通过,服务器才会响应用户的用户请求,并且将授信凭证缓存起来。

如果第三方攻击企图截取并重用授信凭证,在30分钟内发起请求,服务器的重演性验证将会发现授信凭证已经被提交过了。因为第三方截取的用户请求和授信凭证一定是真实的合法用户的,这真正合法的用户请求会继续穿到服务器。而第三方攻击截取授信凭证,伪造ip,组织请求内容,需要一定时间。这样第一次提交的一定是真实的合法用户,以后的提交必定为攻击者。如果第三方在30分钟后发起请求,授信凭证本身有30分钟的时效期的限制,攻击者的重演企图也不能实现。

实施例二

如图1所示,一种防止会话重演的系统,包括客户端和服务器。

客户端发送附有授信凭证的用户请求至服务器以请求服务器提供服务;服务器对通过授信凭证验证的客户端提供服务。

客户端的形式有多种,例如浏览器或者app应用,用户通过客户端浏览器或者客户端app应用进行用户登录,发送用户名和用户密码至服务器。客户端同时将用户输入的用户名和密码保存起来,客户端并不需要向服务器请求身份认证。服务器端存储有注册成功的用户的信息,该用户信息包括用户名和用户密码的对应关系。

具体的,客户端包括客户端存储模块和授信凭证生成模块。客户端存储模块中存储有用户信息,具体包括:用户名以及用户名对应的用户密码。授信凭证生成模块基于用户的请求内容生成包括根据用户的请求内容和请求时间加密的密文的授信凭证。

授信凭证生成模块包括第一信息摘要生成单元、加密单元,第一信息摘要生成单元将用户的请求内容进行摘要运算以获得第一信息摘要。作为优选,本实施例中的摘要运算采用消息摘要算法(例如,messagedigestalgorithmmd5,消息摘要算法第五版)以获得固定长度的第一信息摘要,同时还具有容易计算、抗修改性和强抗碰撞的优点。加密单元将用户的用户密码作为key对由第一信息摘要生成单元得到的第一信息摘要和用户的请求时间进行加密得到密文。授信凭证生成模块将由加密单元生成的密文连同用户的用户名一起作为授信凭证。客户端将由授信凭证生成模块得到的授信凭证连同用户的本次请求的请求内容一起作为用户请求发送给服务器。

服务器包括服务器存储模块、缓存模块、验证模块。服务器存储模块中存储有注册成功的用户信息,该用户信息包括:用户名、以及该用户名对应的用户密码。缓存模块用于缓存该服务器上已通过授信验证的授信凭证,该缓存模块中的授信凭证的缓存时间为授信凭证的时效期(本实施例中为30分钟)。即对于缓存在其中的授信凭证,如果其缓存时间超过时效期30分钟,缓存模块会将其删除。验证模块用户验证用户请求的授信凭证。验证模块进一步包括合法性验证单元、时效性验证单元和重演性验证单元。其中,合法性验证单元用于验证用户请求的授信凭证是否合法。进一步包括解密子单元、第二信息摘要生成子单元、匹配子单元、以及时效性验证子单元。解密子单元根据用户的用户名在服务器存储模块中查找出用户的用户密码,利用该用户密码对负载授信凭证中的密文进行解密得到第一信息摘要。第二信息摘要生成子单元将服务器接收到的来自客户端的用户请求中的请求内容进行摘要运算,此处的摘要运算算法应该与客户端的第一信息摘要生成单元所采用的算法保持一致。例如本实施例中的第二信息摘要生成子单元应采用与第一信息摘要生成单元一致的消息摘要算法第五版。匹配子单元则比较第二信息摘要生成单元获得的第二信息摘要和由解密子单元对附在用户请求的授信凭证中的密文进行解密得到的第一信息摘要是否相同,如果第一信息摘要和第二信息摘要相同则表示授信凭证合法;如果第一信息摘要和第二信息摘要不同则表示授信凭证不合法,服务器不应响应客户端的用户请求。对于通过了合法性验证的授信凭证,时效性验证单元将比较由解密子单元解密得到的请求时间与服务器接受到该用户请求的接收时间之间的时间差是否大于授信凭证的时效期30分钟:如果是,则表示该授信凭证已失效;如果不是,则表示该授信凭证仍有效。对于通过时效性验证的授信凭证,重演性验证单元在服务器的缓存模块中检索该授信凭证是否已经存在,如果存在则表示该用户请求为非真实用户的重演行为,服务器不应响应该用户请求;如果不存在则表示该用户请求为真实的用户请求,服务器应响应该用户请求,授信验证通过,并将该授信凭证缓存起来。

本实施例中,基于上述系统的防止会话重演的方法如下,包括:

步骤s1,客户端发送用户请求至服务器,用户请求包括请求内容和授信凭证,授信凭证包括根据请求内容和用户的请求时间进行加密的密文。具体包括:

步骤s1-1,由客户端的第一信息摘要生成单元对用户的请求内容进行进行摘要运算(本实施例中为md5运算,即消息摘要算法第五版)生成第一信息摘要;

步骤s1-2,客户端的授信凭证生成模块的加密单元将用户的用户密码作为key对步骤s1-1中得到的第一信息摘要和用户的请求时间进行加密得到与第一信息摘要对应的密文;

步骤s1-3,客户端的授信凭证生成模块将加密单元在步骤s1-2中得到的密文和用户的用户名一起作为授信凭证。

步骤s1-4,客户端发送用户请求至服务器,该用户请求包括了用户本次请求的请求内容和由步骤s1-3得到的授信凭证。

步骤s2,服务器接收来自客户端的用户请求并验证附在用户请求中的授信凭证,验证通过则缓存所述授信凭证并且响应所述用户请求,验证不通过则拒绝所述用户请求。授信凭证的验证包括:

步骤s2-1,合法性验证,服务器的验证模块的合法性验证单元根据用户请求的授信凭证中的客户端信息和服务器信息验证授信凭证是否合法。合法性验证通过则继续步骤s2-2,合法性验证不通过则所述授信验证不通过并且不响应所述用户请求。具体包括:

步骤s2-1-1,合法性验证单元的解密单子元根据用户的用户名在服务器的服务器存储模块中查找与该用户名对应的用户密码。

步骤s2-1-2,合法性验证单元通过解密子单元利用步骤s2-1-1中得到的用户密码对用户请求的授信凭证中的密文进行解密得到第一信息摘要;合法性验证单元通过第二信息摘要生成子单元根据用户请求中的请求内容进行摘要运算(本实施例中为md5运算,即消息摘要算法第五版)得到第二信息摘要。

步骤s2-1-3,合法性验证单元的匹配子单元比较步骤s-1-2中得到的第一信息摘要和第二信息摘要是否相同。如果两者相同则表示合法性验证通过;如果两者不相同则表示合法性验证不通过。

步骤s2-2,时效性验证,验证模块的时效性验证单元根据时效信息验证授信凭证是否在时效期内,如果授信凭证在时效期内则时效性验证通过,如果授信凭证不在时效期内则时效性验证不通过。时效性验证通过则继续步骤s2-3,合法性验证不通过则授信验证不通过并且不响应用户请求。具体包括:

步骤s2-2-1,提取解密单元对授信凭证进行解密以后得到的用户的请求时间(即时效信息);

步骤s2-2-2,时效性验证单元将比较在步骤2-2-1中得到的请求时间和服务器接收到该用户请求的接收时间之间的时间差是否大于授信凭证的时效期30分钟:如果是,则表示该授信凭证已失效,时效性验证不通过;如果不是,则表示该授信凭证仍有效,时效性验证通过。

步骤s2-3,重演性验证,验证服务器的缓存模块中是否存在相同的授信凭证。重演性验证通过则授信验证通过,重演性验证不通过则授信验证不通过并且不响应用户请求。

步骤s2-4,缓存通过授信凭证验证的授信凭证。只有上述三步验证均通过,服务器才会响应用户的用户请求,并且将授信凭证缓存起来。

如果第三方攻击企图截取并重用授信凭证,在30分钟内发起请求,服务器的重演性验证将会发现授信凭证已经被提交过了。因为第三方截取的用户请求和授信凭证一定是真实的合法用户的,这真正合法的用户请求会继续穿到服务器。而第三方攻击截取授信凭证,伪造ip,组织请求内容,需要一定时间。这样第一次提交的一定是真实的合法用户,以后的提交必定为攻击者。如果第三方在30分钟后发起请求,授信凭证本身有30分钟的时效期的限制,攻击者的重演企图也不能实现。

本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1