【发明内容】
有鉴于此,本发明提供了一种安全通讯方法和装置,以便于提高客户端与服务器之间通讯的安全性。
具体技术方案如下:
本发明提供了一种安全通讯的方法,该方法由设置于客户端和服务器之间的安全代理设备执行,该方法包括:
S1、接收到服务器返回给客户端的数据后,为所述客户端分配令牌,将所述令牌、所述服务器返回给客户端的数据以及执行模块发送给所述客户端;
S2、接收运行于所述客户端的所述执行模块利用所述令牌发送的请求,对所述令牌进行验证,如果验证通过,则将所述请求转发给所述服务器。
根据本发明一优选实施方式,该方法还包括:
接收到所述客户端向所述服务器发送的请求后,判断是否已为该客户端分配有效的令牌,如果否,则将该请求转发给服务器;如果是,则判断该请求是否携带令牌,如果携带,则执行所述对所述令牌进行验证的步骤。
根据本发明一优选实施方式,该方法还包括:
对所述请求进行合法性验证,如果验证失败,则拒绝对所述请求进行处理。
根据本发明一优选实施方式,所述合法性验证包括以下一种或任意组合:
验证请求的协议头是否符合协议规定的类型;
对请求的协议头和请求地址进行语法验证;
验证请求的协议头和请求地址是否包含攻击代码;以及,
对请求的请求地址进行身份验证。
根据本发明一优选实施方式,为所述客户端分配令牌包括:采用访问令牌密钥对包含访问密钥的数据进行加密后,得到访问令牌;
在所述S2中,所述执行模块发送的请求携带所述访问令牌。
根据本发明一优选实施方式,所述包含访问密钥的数据还包括以下数据中的一种或任意组合:
时间戳、令牌序列号、请求地址的哈希值以及客户端状态值;
其中所述客户端状态值是依据客户端所发送请求是否携带正确的令牌或者是否合法进行设置的。
根据本发明一优选实施方式,为所述客户端分配令牌还包括客户端状态请求令牌;
在所述S1中发送给客户端的还包括:所述客户端状态请求令牌和客户端状态请求密钥;
在所述S1和所述S2之间,还包括:
S31、接收所述执行模块发送的客户端状态请求令牌;
S32、验证所述客户端状态请求令牌合法后,为客户端分配客户端状态令牌,将利用所述客户端状态请求密钥加密后的客户端状态令牌发送给所述客户端;
在所述S2中,所述执行模块发送的请求进一步携带所述客户端状态令牌。
根据本发明一优选实施方式,所述客户端状态请求令牌是利用客户端状态请求令牌密钥对包含客户端状态请求密钥的数据进行加密后得到的。
根据本发明一优选实施方式,在所述S32中,对所述客户端状态请求令牌是否合法的验证包括:
判断接收到的所述客户端状态请求令牌是否是为该客户端分配的客户端状态请求令牌且未被客户端使用过,如果是,则确定所述客户端状态请求令牌合法;否则,确定所述客户端状态请求令牌不合法。
根据本发明一优选实施方式,所述客户端状态请求密钥包括:客户端状态请求加密密钥和客户端请求哈希密钥;
在所述S32中利用所述客户端状态请求加密密钥对客户端状态令牌进行加密;
在所述S31中还接收到利用所述客户端状态请求加密密钥加密的随机数和利用所述客户端请求哈希密钥对所述随机数取哈希得到的哈希值;
在所述S32中进一步包括:利用所述客户端状态请求加密密钥对接收到的随机数进行解密,然后利用所述哈希值对解密得到的随机数进行验证;验证通过后,执行所述为客户端分配客户端状态令牌的步骤。
根据本发明一优选实施方式,在所述S2中,如果对所述令牌进行验证失败,或者接收到的请求不携带所述令牌,则拒绝对所述请求进行转发。
根据本发明一优选实施方式,在所述S1中发送给客户端的还包括:非法攻击诱捕模块,所述非法攻击诱捕模块包含伪造的URL;
如果检测到针对所述伪造的URL的请求,则确定发送针对所述伪造的URL的请求的客户端为具有攻击性的客户端。
根据本发明一优选实施方式,在所述S1中还包括:将所述访问密钥发送给所述客户端;
在所述S2中,将所述请求转发给所述服务器包括:利用所述访问密钥对请求包含的数据进行解密,将解密后的请求转发给所述服务器。
本发明还提供了一种安全通讯的装置,该装置设置于客户端和服务器之间的安全代理设备,该装置包括:响应处理单元、令牌管理单元和请求处理单元;
所述响应处理单元,用于接收服务器返回给客户端的数据,将为所述客户端分配的令牌、所述服务器返回给客户端的数据以及执行模块发送给所述客户端;
所述令牌管理单元,用于在所述响应处理单元接收到服务器返回给客户端的数据后,为所述客户端分配令牌;对所述请求处理单元提供的令牌进行验证;
所述请求处理单元,用于接收运行于所述客户端的所述执行模块利用所述令牌发送的请求,将所述令牌提供给所述令牌管理单元,如果所述令牌验证通过,则将所述请求转发给所述服务器。
根据本发明一优选实施方式,所述请求处理单元,还用于接收到所述客户端向所述服务器发送的请求后,触发所述令牌管理单元判断是否已为该客户端分配有效的令牌,如果所述令牌管理单元的判断结果为否,则将该请求转发给服务器;如果所述令牌管理单元的判断结果为是,则判断该请求是否携带令牌,如果携带,则执行将所述令牌提供给所述令牌管理单元的操作。
根据本发明一优选实施方式,所述请求处理单元,还用于对所述请求进行合法性验证,如果验证失败,则拒绝对所述请求进行处理。
根据本发明一优选实施方式,所述请求处理单元,还用于对所述请求执行以下合法性验证中的一种或任意组合:
验证请求的协议头是否符合协议规定的类型;
对请求的协议头和请求地址进行语法验证;
验证请求的协议头和请求地址是否包含攻击代码;以及,
对请求的请求地址进行身份验证。
根据本发明一优选实施方式,所述令牌管理单元在为所述客户端分配令牌时,具体采用访问令牌密钥对包含访问密钥的数据进行加密后,得到访问令牌;
所述执行模块发送的请求携带所述访问令牌。
根据本发明一优选实施方式,所述包含访问密钥的数据还包括以下数据中的一种或任意组合:
时间戳、令牌序列号、请求地址的哈希值以及客户端状态值;
其中所述客户端状态值是依据客户端所发送请求是否携带正确的令牌或者是否合法进行设置的。
根据本发明一优选实施方式,该装置还包括:状态验证单元;
所述令牌管理单元在为所述客户端分配令牌时,进一步分配客户端状态请求令牌;受到所述状态验证单元的触发后,为所述客户端分配客户端状态令牌;
所述响应处理单元在将为所述客户端分配的令牌、所述服务器返回给客户端的数据以及执行模块发送给所述客户端时,进一步发送所述客户端状态请求令牌和客户端状态请求密钥;
所述状态验证单元,用于接收所述执行模块发送的客户端状态请求令牌;验证所述客户端状态请求令牌合法后,触发所述令牌管理单元为客户端分配客户端状态令牌;将利用所述客户端状态请求密钥加密后的客户端状态令牌发送给所述客户端;
所述执行模块发送的请求进一步携带所述客户端状态令牌。
根据本发明一优选实施方式,所述令牌管理单元在为客户端分配客户端状态令牌时,具体利用客户端状态请求令牌密钥,对包含客户端状态请求密钥的数据进行加密后,得到所述客户端状态令牌。
根据本发明一优选实施方式,所述状态验证单元在验证所述客户端状态请求令牌是否合法时,具体用于:
判断接收到的所述客户端状态请求令牌是否是为该客户端分配的客户端状态请求令牌且未被客户端使用过,如果是,则确定所述客户端状态请求令牌合法;否则,确定所述客户端状态请求令牌不合法。
根据本发明一优选实施方式,所述客户端状态请求密钥包括:客户端状态请求加密密钥和客户端请求哈希密钥;
所述状态验证单元具体利用所述客户端状态请求加密密钥对客户端状态令牌进行加密;
所述状态验证单元还接收到利用所述客户端状态请求加密密钥加密的随机数和利用所述客户端请求哈希密钥对所述随机数取哈希得到的哈希值;利用所述客户端状态请求加密密钥对接收到的随机数进行解密,然后利用所述哈希值对解密得到的随机数进行验证;验证通过后,执行所述触发令牌管理单元为客户端分配客户端状态令牌的操作。
根据本发明一优选实施方式,如果所述令牌验证失败,或者接收到的请求不携带所述令牌,则所述请求处理单元拒绝对所述请求进行转发。
根据本发明一优选实施方式,所述响应处理单元在将为所述客户端分配的令牌、所述服务器返回给客户端的数据以及执行模块发送给所述客户端时,进一步发送非法攻击诱捕模块,所述非法攻击诱捕模块包含伪造的URL;
该装置还包括:非法攻击检测单元,用于如果检测到针对所述伪造的URL的请求,则确定发送针对所述伪造的URL的请求的客户端为具有攻击性的客户端。
根据本发明一优选实施方式,所述响应处理单元在将为所述客户端分配的令牌、所述服务器返回给客户端的数据以及执行模块发送给所述客户端时,进一步将所述访问密钥发送给所述客户端;
所述请求处理单元在将所述请求转发给所述服务器时,利用所述访问密钥对请求包含的数据进行解密,将解密后的请求转发给所述服务器。
由以上技术方案可以看出,本发明在客户端和服务器之间设置安全代理设备,由安全代理设备完成客户端和服务器之间请求和数据的转发,并且通过向客户端注入执行模块,使得客户端利用安全代理设备为客户端分配的令牌发送请求,从而实现对客户端的访问控制,提高了客户端与服务器之间通讯的安全性,并有效保护服务器的安全。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
本发明实施例基于如图1中所示的系统架构,在该系统中,客户端与服务器之间设置有安全代理设备(可为硬件、软件及虚拟机等形态),该安全代理设备作为中间设备,负责客户端与服务器之间的通讯安全,客户端与服务器之间交互的数据必须经由安全代理设备转发。为了实现安全代理设备对客户端与服务器之间交互数据的转发,可以预先采用但不限于以下网络设置方式:
第一种方式:将安全代理设备组网于服务器的入口位置,该组网方式使得客户端与服务器之间交互的数据必须经由安全代理设备。
第二种方式:在域名解析系统(DNS,DomainNameSystem)中设置将指向服务器的域名解析为安全代理设备的IP地址,这样发送给服务器的数据将会被发送给安全代理设备,然后设置安全代理设备接收到来自客户端的数据均发送给服务器。
在本发明实施例中安全代理设备的功能主要表现为以下几个方面,具体功能实现将在后续实施例中详细描述:
1)对于尚未分配令牌的客户端发送的请求,若是访问指定入口(即是客户端发送给指定服务器的请求),则直接转发给服务器,并转发服务器返回的数据给客户端;否则,拒绝该请求。
2)对请求或数据内容的安全性进行验证。
3)在将服务器返回的数据转发给客户端时,为客户端分配令牌和令牌密钥,并连同执行模块和数据一通发送给客户端。
4)利用为客户端分配的令牌密钥,对客户端发送的请求进行解密、
5)接收到客户端发送的请求时,基于连同请求发送的令牌对客户端进行访问控制。
图2为本发明实施例提供的方法流程图,如图2中所示,该方法可以包括以下步骤:
在201中,安全代理设备接收来自客户端的请求,该请求表示为req,对该请求进行合法性验证,如果验证通过,则继续执行202。如果验证失败,则拒绝对该请求的处理。
其中对该请求进行的合法性验证可以包括但不限于:
1)对该请求的协议头(Header)进行合法性验证,即验证是否符合协议规定的类型,如果是,则验证通过,否则验证失败。
2)对该请求的Header和请求地址的语法进行验证,即验证其语法是否符合协议规定的语法要求,如果是,则验证通过,否则验证失败。这里的请求地址指的是所请求的资源地址,可以体现为URL。
3)对该请求的Header和请求地址是否包含攻击内容进行验证,即验证其是否包含攻击代码,如果是,则验证失败,否则验证通过。该验证可以基于黑名单或者基于攻击代码的特征来实现。
4)对请求地址进行身份验证,可以基于白名单或黑名单的方式,例如验证请求地址是否在白名单中,如果是,则验证通过,否则验证失败。
在202中,安全代理设备将该请求转发至服务器。
步骤201~202所示的情况可以是该客户端首次发送请求给安全代理设备,安全代理设备尚未分配令牌给该客户端,若该请求是发送给指定服务器的,则直接转发该客户端的请求至服务器。
如果客户端发送的请求并非是发送给指定服务器的,那么安全代理设备可以拒绝该请求。
另外,在安全代理设备中可以对服务器返回的数据进行本地存储,因此在将请求转发至服务器之前,可以首先判断该请求所请求的数据是否在本地存储有,且是最新数据,如果是,则安全代理设备可以直接利用本地存储的数据执行204,否则执行203。其中在判断本地存储的数据是否为最新时,可以根据数据的老化时间来判断,也可以通过与服务器交互数据版本号的方式来判断,在此不再详述。
在203中,安全代理设备接收服务器返回的数据,图中标识为Data。还可以进一步对该数据进行验证,例如验证该数据是否存在攻击内容,验证数据的正确性等等。如果通过验证,服务器可以执行204,还可以进一步将该数据在安全代理设备本地进行存储。
在204中,安全代理设备为客户端分配令牌和令牌密钥,将令牌、令牌密钥、服务器返回的数据以及执行模块发送给客户端。
其中分配的令牌可以包括访问令牌AccessToken,该AccessToken可以采用访问令牌密钥tek-AT对包含访问密钥AccessKey的数据进行加密后得到。例如,该AccessToken可以采用tek-AT对访问密钥AccessKey、时间戳Timestamp、令牌序列号TokenSerialNumber、上述的请求地址的哈希值以及状态值Status进行加密后得到,可以表示为:
Etek-AT(AccessKey,Timestamp,TokenSerialNumber,Hash(请求地址),Status,Hash)
其中,tek-AT仅在安全代理设备上设置。
AccessKey用于后续运行于客户端的执行模块,在向服务器发送请求时,加密该请求时使用。
TokenSerialNumber用于指示Token的序列号,安全代理设备分配令牌时,每次分配的TokenSerialNumber都不同,但对于同一步骤中分配的不同类型的TokenSerialNumber是相同的。例如本步骤中除了AccessToken之外,还可以分配客户端状态请求令牌ClientStatusRequestToken,这两个Token采用相同的TokenSerialNumber。
Status用于标识客户端的状态,正常情况下,合法状态设置该Status的值1,当来自该客户端的请求在设定时间内有超过预设阈值数量的请求是不携带客户端状态令牌ClientStatusToken的,或者接收到来自该客户端的大量非法请求时,设置该Status的值为0(对于后续携带Status的值为0的请求,安全代理可直接或以随机的方式,拒绝该请求)。关于客户端请求携带ClientStatusToken的情形将在后续描述中涉及。
最后的Hash,表示对之前的参数AccessKey,Timestamp,TokenSerialNumber,Hash(请求地址),Status取哈希后得到的哈希值,主要用于该数据的接收者来验证数据完整性。后续涉及到的Hash也是此含义,不再赘述。
更进一步地,安全代理设备还可以为客户端分配客户端状态请求令牌ClientStatusRequestToken,连同该ClientStatusRequestToken发送的还包括客户端状态请求密钥ClientStatusRequestKey。该ClientStatusRequestToken可以采用客户端状态请求令牌密钥tek-CSRT对包含ClientStatusRequestKey的数据进行加密后得到,例如,该ClientStatusRequestToken可以采用tek-CSRT时间戳Timestamp、令牌序列号TokenSerialNumber、当前地址的哈希值和ClientStatusRequestKey进行加密后得到,可以表示为:
Etek-CSRT(Timestamp,TokenSerialNumber,Hash(请求地址),ClientStatusRequestKey,Hash)
其中,tek-CSRT仅在安全代理设备设置。
发送给客户端的执行模块可以采用客户端代码的形式,该执行模块可以运行于客户端,使得客户端一方面能够执行后续步骤205以检查客户端状态,另一方面能够执行后续步骤207,即按照步骤207的方式向服务器发送请求。
上述令牌、令牌密钥、服务器返回的数据以及执行模块可以插入返回给客户端的数据报文中。更进一步地,插入该数据报文的还可以包括:安全代理设备加密缓存信息ProxyEncryptedCookie以及非法攻击诱捕模块。其中ProxyEncryptedCookie主要用于携带针对该客户端的会话信息或上下文信息,以方便在安全代理设备出现故障切换至另外一个安全代理设备处理时,能够根据这些会话信息或上下文信息继续进行处理,从而提高可靠性。非法攻击诱捕模块中可以设置一些伪造的URL,如果接收到该数据的客户端是具有攻击性的客户端,通常该客户端中运行的非法代码会获取到这些伪造的URL,从而发起攻击,那么就会有该客户端设备发送至该伪造的URL的请求,就能够识别出该客户端为具有攻击性的客户端。
在205中,客户端的执行模块利用ClientStatusRequestKey对随机数R-CSRT进行加密后,将加密后的随机数与分配给客户端的ClientStatusRequestToken发送给安全代理设备,R-CSRT是客户端的执行模块产生的随机数。
其中,ClientStatusRequestKey可以包含两个独立的密钥:客户端状态请求加密密钥ClientStatusRequestEncryptionKey和客户端请求哈希密钥ClientStatusRequestHashKey,在对R-CSRT进行加密时,可以采用ClientStatusRequestEncryptionKey对R-CSRT进行加密,表示为ECSREK(R-CSRT),另外采用ClientStatusRequestHashKey对R-CSRT取哈希值,表示为HCSRHK(R-CSRT)。将ECSREK(R-CSRT)、HCSRHK(R-CSRT)连同ClientStatusRequestToken发送给安全代理设备。
安全代理服务器每次分配的ClientStatusRequestToken均是不同的,保证每个ClientStatusRequestToken只能被使用一次。
在206中,安全代理设备检查接收到的ClientStatusRequestToken是否合法以及对接收到的随机数R-CSRT进行验证,如果ClientStatusRequestToken合法,且随机数通过验证,则利用ClientStatusRequestKey对包含ClientStatusToken的数据进行加密后返回客户端。
其中,如果ClientStatusRequestToken是为该客户端分配的ClientStatusRequestToken,且未被客户端使用过,则可以认为ClientStatusRequestToken合法;如果ClientStatusRequestToken已经被客户端使用过或者并非为该客户端分配的ClientStatusRequestToken,则可以认为ClientStatusRequestToken非法。
在对接收到的随机数R-CSRT进行验证时,可以利用ClientStatusRequestEncryptionKey对ECSREK(R-CSRT)进行解密后得到R-CSRT、然后利用HCSRHK(R-CSRT)对R-CSRT进行验证,
在利用ClientStatusRequestKey对包含ClientStatusToken的数据进行加密时,可以具体利用ClientStatusRequestEncryptionKey对R-CSRT、R-CST、ClientStatusToken进行加密,表示为:
ECSREK(R-CST,R-CSRT,ClientStatusToken,Hash)。
另外,在返回ECSREK(R-CST,R-CSRT,ClientStatusToken,Hash)之前,还可以进一步验证ProxyEncryptedCookie(执行模块可以将安全代理设备发送给客户端的ProxyEncryptedCookie再反馈回来),即验证执行模块发送的ProxyEncryptedCookie与自身存储的ProxyEncryptedCookie是否一致,如果一致,则通过验证,如果不一致,则不通过验证。
还可以进一步检查Timestamp是否过期。
当ProxyEncryptedCookie验证通过且Timestamp未过期时,向客户端返回ECSREK(R-CST,R-CSRT,ClientStatusToken,Hash)。
其中,ClientStatusToken是利用客户端状态令牌密钥tek-CST对时间戳Timestamp、令牌序列号TokenSerialNumber、请求地址的哈希值以及状态值Status进行加密后得到的,可以表示为:
Etek-CST(Timestamp,TokenSerialNumber,Hash(请求地址),Status’,Hash)
其中,Status’用于指示接收到的ClientStatusRequestToken是否合法。当接收到的ClientStatusRequestToken合法时,Status’的值取1,当接收到的ClientStatusRequestToken非法时,Status’的值取0.
在207中,客户端首先利用ClientStatusRequestKey对安全代理设备返回的数据进行解密,得到ClientStatusToken,利用AccessToken和ClientStatusToken向服务器发送请求,该请求所包含的数据可以利用AccessKey进行加密,图中表示为Enc(req1)。
本步骤中,可以具体ClientStatusRequestEncryptionKey对安全代理设备返回的数据进行解密,得到R-CSRT、R-CST、ClientStatusToken;然后对R-CSRT和Hash进行验证,如果验证通过,则利用ClientStatusToken向服务器发送请求。如果验证未通过,可以返回错误信息给安全代理设备。
在本步骤中,可以依据客户端发送的具体请求来进行不同的处理,可以分为以下几种情况:
第一种情况:客户端向服务器发送的请求为一般地址请求,则可以将该地址请求连同AccessToken和ClientStatusToken进行发送。
第二种情况:客户端向服务器发送的请求为一般表单请求,则可以利用AccessKey对表单数据进行加密,将加密后的数据连同AccessToken和ClientStatusToken进行发送。
第三种情况:客户端向服务器发送的请求包含生成的地址与表单数据,则可以利用访问密钥AccessKey对请求地址和表单数据进行加密后,连同访问令牌AccessToken和ClientStatusToken进行发送。
上述三种情况中,令牌可以附加于请求地址、请求的报文(Header)或加密数据中。
可选地,除了对请求包含的数据进行加密之外,被加密的数据还可以包括该请求包含的数据的哈希值,主要用于进行数据验证时使用。
在208中,安全代理设备对接收到的ClientStatusToken和AccessToken进行验证,如果验证通过,则将解密后的请求转发给服务器。
实质上,安全代理设备接收到来自客户端的请求后,会首先判断是否为该客户端分配了有效的令牌,如果没有为该客户端分配有效的令牌且该请求是发送给指定服务器的,则按照201中所述的方式,直接转发请求至服务器。如果该请求并非发送给指定服务器的,则可以拒绝该请求。如果已经为该客户端分配了有效的令牌,则判断是否有为该客户端分配的令牌连同该请求发送,如果是,则将该请求转发给服务器;否则,拒绝对该请求进行转发,或者记录该客户端发送的请求不携带ClientStatusToken的次数,当该客户端的请求在设定时间内有超过预设阈值的数量的请求是不携带ClientStatusToken的,则拒绝对该请求进行处理。
除了对令牌进行验证之外,还可以进一步执行以下验证或检查:验证ProxyEncryptedCookie、检查该请求是否存在非法Header、检查该请求的Header以及请求地址的完整性、检查该请求的Header以及请求地址是否具有攻击代码、检查该请求的数据内容是否包含攻击代码,等等。这些验证或检查都通过后,可以转发请求至服务器。
另外,如果该请求是加密后的请求,则利用AccessKey对请求进行解密后转发给服务器,如果该请求是未加密的请求,则直接转发给服务器。
ClientStatusToken可以用于检查执行模块的运行状态,如果来自客户端的请求在设定时间内有超过预设阈值数量的请求是不携带ClientStatusToken的,则可以确定执行模块的运行异常,客户端处于非法状态,后续在210中给客户端分配新的AccessToken时,设置Status的值为0。
步骤209同步骤203。
步骤210同步骤204。为了与步骤203和204中返回的数据以及分配的令牌和密钥以示区分,图中将209和210中服务器返回的数据表示为Data1,分配的令牌和密钥分别表示为AccessToken1和AccessKey1。
之后的交互流程重复执行上述步骤205~210。
需要说明的是,上述步骤205~206用于主要用户检查客户端中执行模块是否运行正常,即客户端是否正常运行安全代理设备发送给客户端的执行代码,并不是必须执行的步骤,如果不执行步骤205~206,则在步骤204中无需为客户端分配并发送ClientStatusRequestToken,在步骤207中,可以不采用ClientStatusToken,而采用访问令牌AccessToken来发送请求。
以上是对本发明提供的方法进行的描述,下面对本发明提供的装置进行详细描述。图3为本发明实施例提供的装置结构图,该装置可以设置于上述安全代理设备,如图3所示,该装置可以包括:响应处理单元01、令牌管理单元02和请求处理单元03,还可以包括状态验证单元04和非法攻击检测单元05。其中各组成单元的主要功能如下:
响应处理单元01负责处理服务器返回给客户端的数据,主要包括:接收服务器返回给客户端的数据,将为客户端分配的令牌、服务器返回给客户端的数据以及执行模块发送给客户端。
令牌管理单元02负责为客户端分配令牌以及对令牌的管理、验证。主要包括:在响应处理单元01接收到服务器返回给客户端的数据后,为客户端分配令牌;对请求处理单元03提供的令牌进行验证。
请求处理单元03负责对客户端发送给服务器的数据进行处理,主要包括:接收运行于客户端的执行模块利用令牌发送的请求,将令牌提供给令牌管理单元02,如果令牌验证通过,则将请求转发给服务器。如果令牌验证失败,或者接收到的请求不携带为所述客户端分配的令牌,则请求处理单元03可以拒绝对请求进行处理。
其中请求处理单元03接收到客户端发送至指定服务器的请求后,可以首先触发令牌管理单元02判断是否已为该客户端分配有效的令牌,如果令牌管理单元02的判断结果为否,则将该请求转发给服务器,这种情况对应于图2中202所示的情况。如果令牌管理单元02的判断结果为是,则判断该请求是否携带令牌,如果携带,则执行将令牌提供给令牌管理单元02的操作,这种情况对应于图2中208所示的情况。
请求处理单元03在接收到上述请求后,可以对请求进行合法性验证,如果验证失败,则可以拒绝对该请求进行处理。具体地,可以执行以下合法性验证中的一种或任意组合:
验证请求的协议头是否符合协议规定的类型;
对请求的协议头和请求地址进行语法验证;
验证请求的协议头和请求地址是否包含攻击代码;以及,
对请求的请求地址进行身份验证。
令牌管理单元02在为客户端分配令牌时,可以采用访问令牌密钥对包含访问密钥的数据进行加密后,得到访问令牌。相应地,执行模块发送的请求携带访问令牌。此时,包含访问密钥的数据还包括以下数据中的一种或任意组合:时间戳、令牌序列号、请求地址的哈希值以及客户端状态值。例如,可以表示为:Etek-AT(AccessKey,Timestamp,TokenSerialNumber,Hash(请求地址),Status,Hash),即采用tek-AT对访问密钥AccessKey、时间戳Timestamp、令牌序列号TokenSerialNumber、上述的请求地址的哈希值以及状态值Status进行加密。
TokenSerialNumber用于指示Token的序列号,安全代理设备分配令牌时,每次分配的TokenSerialNumber都不同,但对于同次分配的不同类型的TokenSerialNumber是相同的。例如在此除了AccessToken之外,还可以分配客户端状态请求令牌ClientStatusRequestToken,这两个Token采用相同的TokenSerialNumber。
客户端状态值Status是依据客户端所发送请求是否携带正确的令牌或者是否合法进行设置的。例如正常情况下,合法状态设置该Status的值1,当来自该客户端的请求在设定时间内有超过预设阈值数量的请求是不携带客户端状态令牌ClientStatusToken的,或者接收到来自该客户端的大量非法请求时,设置该Status的值为0。(安全代理设备对使用status为0的Token的请求,可直接或随机拒绝该请求)
上面已经提到,令牌管理单元02在为客户端分配令牌时,可以进一步分配客户端状态请求令牌。相应地,响应处理单元01在将为客户端分配的令牌、服务器返回给客户端的数据以及执行模块发送给客户端时,进一步发送客户端状态请求令牌和客户端状态请求密钥。
运行于客户端的执行模块,还可以接收到服务器返回的数据后,向安全代理设备发送客户端状态请求令牌。此时,状态验证单元04接收执行模块发送的客户端状态请求令牌;验证客户端状态请求令牌合法后,触发令牌管理单元02为客户端分配客户端状态令牌,将利用客户端状态请求密钥加密后的客户端状态令牌发送给客户端。
上述操作对应图2中204~206。
后续执行模块发送的请求进一步携带客户端状态令牌,也就是说,后续执行模块在向服务器发送请求时,可以仅携带访问令牌,也可以携带访问令牌和客户端状态令牌。
令牌管理单元02在为客户端分配客户端状态令牌时,可以利用客户端状态请求令牌密钥,对包含客户端状态请求密钥的数据进行加密后,得到客户端状态令牌。例如,客户端状态令牌ClientStatusToken可以利用客户端状态令牌密钥tek-CST对时间戳Timestamp、令牌序列号TokenSerialNumber、请求地址的哈希值以及状态值Status进行加密后得到,可以表示为:
Etek-CST(Timestamp,TokenSerialNumber,Hash(请求地址),Status’,Hash)
其中,Status’用于指示接收到的ClientStatusRequestToken是否合法。当接收到的ClientStatusRequestToken合法时,Status’的值取1,当接收到的ClientStatusRequestToken非法时,Status’的值取0。
状态验证单元04在验证客户端状态请求令牌是否合法时,可以判断接收到的客户端状态请求令牌是否是为该客户端分配的客户端状态请求令牌且未被客户端使用(本发明实施例中,为客户端分配的客户端状态请求令牌通常仅能使用一次),如果是,则确定客户端状态请求令牌合法;否则,确定客户端状态请求令牌不合法。
优选地,客户端状态请求密钥可以包括:客户端状态请求加密密钥和客户端请求哈希密钥。状态验证单元04可以利用客户端状态请求加密密钥对客户端状态令牌进行加密。
这种情况下,运行于客户端的执行模块可以利用客户端状态请求加密密钥加密随机数R-CSRT,并利用客户端请求哈希密钥对随机数R-CSRT取哈希,然后将加密后的随机数和哈希值发送给安全代理设备。状态验证单元04接收到后,利用客户端状态请求加密密钥对接收到的随机数进行解密,然后利用哈希值对解密得到的随机数进行验证;验证通过后,执行为客户端分配客户端状态令牌的操作。
优选地,响应处理单元04在将为客户端分配的令牌、服务器返回给客户端的数据以及执行模块发送给客户端时,可以进一步发送非法攻击诱捕模块,非法攻击诱捕模块包含伪造的URL。如果接收到该数据的客户端是具有攻击性的客户端,通常该客户端中运行的非法代码会获取到这些伪造的URL,从而发起攻击,那么就会有该客户端设备发送至该伪造的URL的请求。非法攻击检测单元05如果检测到针对伪造的URL的请求,则确定发送针对伪造的URL的请求的客户端为具有攻击性的客户端。
另外,响应处理单元01在将为客户端分配的令牌、服务器返回给客户端的数据以及执行模块发送给客户端时,可以进一步将访问密钥发送给客户端。运行于客户端的执行模块可以将请求所包含的数据利用访问密钥进行加密后,发送给服务器。此时,请求处理单元03在将请求转发给服务器时,可以利用访问密钥对请求包含的数据进行解密,将解密后的请求转发给服务器。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。