一种客户端通过URL与服务器通讯的方法及***
技术领域
本发明涉及通信领域,特别是一种客户端通过URL与服务器通讯的方法及***。
背景技术
软件客户端经常需要通过URL地址与服务端通讯,尤其是当客户端需要以网页形式弹框时,这种通讯方式应用得更加普遍。然而传统的URL通讯方式,所有参数都以明文的方式写在URL中,非法用户容易通过修改或伪造URL的方式与服务端通讯,而服务端无法判断此请求的真伪,使这种通讯方式不具备安全性,容易造成用户信息的泄露。
现有技术对URL中的参数进行了加密,但采用整体对所有参数加密的形式会遇到参数长度受限(如IIS服务器限制参数长度为200K,如果把所有参数加密放到一个参数中,可能会大于这个值),或者遇到调试、解析困难的问题(因为参数都是密文方式,在没有密文的情况下,无法查看URL中参数的具体信息,这对于所有调试人员来说都难以调试,而开发、维护、客服人员无法读懂这些参数,如客服人员无法通过URL清晰识别出玩家的账号等)。
因此,需要一种参数以明文方式传递,方便易懂,又能有效验证客户端URL有效性的通讯方式。
发明内容
为解决上述问题,本发明的目的在于提供一种客户端通过URL与服务器通讯的方法及***,以明文方式传递参数,同时又可以有效验证URL信息的有效性。
本发明解决其问题所采用的技术方案是:
本发明的优选实施例提供了一种客户端通过URL与服务器通讯的方法,包括:
URL生成的步骤,生成依次包括URL路径、URL参数和URL校验参数的URL请求,其中,所述URL路径为对应的接收此URL请求的服务器地址,所述URL参数包括参数名和编码后的参数值,所述URL校验参数包括用于标记URL请求有效期的时间戳、随机数、参数值的编码方式和用于验证URL合法性的校验值;
发送请求的步骤,客户端将生成的URL请求发送至服务器;
回应的步骤,服务器接收此URL请求,若判断时间戳无效,则直接舍弃此URL请求,否则,根据URL请求计算其校验值,并与URL请求中的校验值对比判断URL的合法性,若URL请求合法,则回应请求,否则拒绝请求。
在客户端与服务器通信时,URL参数以明文的方式传递,相关人员可以方便识别相应的包括用户名、服务区域等内容,服务器在判断URL请求的有效性时,首先根据时间戳进行判断,其次,根据校验码计算进一步判断,有效保障了信息的安全性。
本发明的优选实施例还提供了一种客户端通过URL与服务器通讯的***,包括:
URL生成模块,生成依次包括URL路径、URL参数和URL校验参数的URL请求,其中,所述URL路径为对应的接收此URL请求的服务器地址,所述URL参数包括参数名和编码后的参数值,所述URL校验参数包括用于标记URL请求有效期的时间戳、随机数、参数值的编码方式和用于验证URL合法性的校验值;
发送请求模块,客户端将生成的URL请求发送至服务器;
回应模块,服务器接收此URL请求,若判断时间戳无效,则直接舍弃此URL请求,否则,根据URL请求计算其校验值,并与URL请求中的校验值对比判断URL的合法性,若URL请求合法,则回应请求,否则拒绝请求。
所生成的URL请求中,随机数是随机选取的,不同的URL请求所生成的随机数不同,而校验码是根据随机数生成的,因此,不同的随机数最终导致校验码的不一致,这就保证在URL生成、传输、回应的整个环节中,对URL进行恶意的修改几乎难以实现,保证了整个信息的安全性。
本发明的有益效果是:
本发明采用一种客户端通过URL与服务器通讯的方法及***,其中的参数以明文的形式显示,利于识别,通过随机数和校验值增加URL修改或伪造的难度,保证整个信息的安全性。
附图说明
下面结合附图和实例对本发明作进一步说明。
图1是本发明所述方法的流程图;
图2是所述URL生成的步骤流程图;
图3是所述校验值生成的流程图;
图4是回应步骤的流程图;
图5是本发明所述***的结构组成框图;
图6是所述URL生成模块的结构组成框图;
图7是所述校验单元的结构组成框图;
图8是所述回应模块的结构组成框图。
具体实施方式
实施例一:
参照图1所述,本发明提供了一种客户端通过URL与服务器通讯的方法,包括步骤:
URL生成的步骤,由客户端生成依次包括URL路径、URL参数和URL校验参数的URL请求,其中,所述URL路径为对应的接收此URL请求的服务器地址,所述URL参数包括参数名和编码后的参数值,所述URL校验参数包括用于标记URL请求有效期的时间戳、随机数、参数值的编码方式和用于验证URL合法性的校验值;
发送请求的步骤,客户端将生成的URL请求发送至服务器;
回应的步骤,服务器接收此URL请求,若判断时间戳无效,则直接舍弃此URL请求,否则,根据URL请求计算其校验值,并与URL请求中的校验值对比判断URL的合法性,若URL请求合法,则回应请求,否则拒绝请求。
其中,参数值在编码时,编码方式可以为base64或urlencode。
在所述URL生成的步骤中,参照图2所示,URL请求在生成时,依次通过如下步骤生成:
步骤200,首先将参数名和编码后的参数值拼接为一字串;
步骤201,将时间戳、随机数、编码方式添加到字串尾部;
步骤202,将URL路径添加至字串的前部;
步骤203,生成所述字串的校验值,并将此校验值添加至字串的尾部。
其中,步骤201中,时间戳是客户端与服务器约定的时间;随机数在每次添加时均不相同,因此,在URL生成时,必然是不同的字串,对应字串的校验值也不同,可以进一步提高URL信息的安全性。
其中,在步骤203中,校验值的需要通过解钥密文才能生成,此密文是客户端与服务端之间约定的密文,参照图3所示校验值生成的流程图,步骤203具体为:
步骤300,首先要获取步骤202所生成的字串的MD5摘要,此摘要为32位小写;
步骤301,先后拼接MD5摘要与客户端和服务器之间约定的密文;
步骤302,将拼接后字串的MD5摘要作为校验值,即重新获取拼接后字串的MD5摘要,此摘要仍为32位小写。
所述发送请求的步骤中,客户端所生成的URL请求会根据URL路径被传送到相应的服务器。
所述回应的步骤中,时间戳是一个判断节点,客户端与服务器可以事先约定客户端发起请求过程中数据的生成时间,在服务器接收到URL请求后,首先通过时间戳判断此请求是否为过去旧的数据,如果时间戳过期,直接抛弃请求即可。
在判断时间戳之后,服务器需要根据URL请求计算其校验值,并与URL请求中的校验值对比判断URL的合法性,两个校验值如果相等,说明URL请求合法,则回应请求,否则拒绝请求。参照图4所示,服务器在根据URL请求计算其校验值时,是一个解密的过程,此过程需要通过密文重新生成校验值,以确定URL请求没有经过修改或伪造,具体如图中所示,包括:
步骤400,去除URL请求中的校验值;
步骤401,获取去除校验值后URL请求字串的MD5摘要;
步骤402,先后拼接MD5摘要与客户端和服务器之间约定的密文;
步骤403,将拼接后字串的MD5摘要作为校验值。
首先去除URL请求中的校验值是为了在生成后续校验值时,与URL请求中的校验值生成时保持一致的字串;同理,其中所生成的MD5摘要均为32位小写的MD5摘要。
本发明在实现时,其中的参数以明文的形式显示,利于识别,通过随机数和校验值增加URL修改或伪造的难度,保证整个信息的安全性。
本发明还提供了一种客户端通过URL与服务器通讯的***,参照图5所示,包括:
URL生成模块500,生成依次包括URL路径、URL参数和URL校验参数的URL请求,其中,所述URL路径为对应的接收此URL请求的服务器地址,所述URL参数包括参数名和编码后的参数值,所述URL校验参数包括用于标记URL请求有效期的时间戳、随机数、参数值的编码方式和用于验证URL合法性的校验值;
发送请求模块501,客户端将生成的URL请求发送至服务器;
回应模块502,服务器接收此URL请求,若判断时间戳无效,则直接舍弃此URL请求,否则,根据URL请求计算其校验值,并与URL请求中的校验值对比判断URL的合法性,若URL请求合法,则回应请求,否则拒绝请求。
参照图6所示,所述URL生成模块包括:
拼接单元600,拼接参数名和编码后的参数值为一字串;
尾单元601,将时间戳、随机数、编码方式添加到字串尾部;
前单元602,将URL路径添加至字串的前部;
校验单元603,生成所述字串的校验值,并将此校验值添加至字串的尾部。
所述校验单元603通过客户端与服务器之间约定的密文生成校验值,参照图7所示,其还包括:
校验一单元700,获取所述字串的MD5摘要;
校验二单元701,先后拼接MD5摘要与客户端和服务器之间约定的密文;
校验三单元702,将拼接后字串的MD5摘要作为校验值。
所述回应模块502首先判断时间戳是否有效,如果有效,则根据URL重新计算校验值,如果与URL本身中的校验值相等,则说明此URL请求有效,则回应,否则即拒绝请求。在根据URL重新计算校验值时,是一个相应的解密过程,需要通过客户端与服务器之间约定的密文计算校验值,具体参照图8所示,回应模块包括:
回应一单元800,去除URL请求中的校验值;
回应二单元801,获取去除校验值后URL请求字串的MD5摘要;
回应三单元802,先后拼接MD5摘要与与客户端和服务器之间约定的密文;
回应四单元803,将拼接后字串的MD5摘要作为校验值。
所述***在具体实现时,与所述方法中的实现方式相同,具体参照以上方法中所述内容。
实施例二:
下面通过具体的例子对本发明作进一步详细说明。
游戏客户端希望向服务器查询游戏角色的等级时,服务器需要若干参数即可返回相应的角色等级给玩家。客户端提供相应的参数值如下表:
参数名 |
参数值 |
参数说明 |
account |
Myaccount |
玩家的帐号名 |
Zone |
电信区1服 |
玩家帐号所在服务器 |
Role |
我是玩家 |
玩家角色名 |
服务端和客户端约定密文为__KINGSOFT__。由于本方法需要对参数值进行编码,因此对上述三个参数进行Base64编码。编码后如下:
参数名 |
参数值 |
Base64 |
Account |
Myaccount |
Myaccount (英文的base64编码不会改变原字串) |
Zone |
电信区1服 |
%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D |
Role |
我是玩家 |
%E7%8E%A9%E5%AE%B6%E8%A7%92%E8%89%B2%E5%90%8D |
客户端需要依此生成URL请求,将这些参数名与参数值以URL传参的方式(就是用&链接不同的参数)拼接成一个字串。拼接好的字串如下:
account=Myaccount&role=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D &Zone=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D。
之后,将时间戳、随机数、编码方式加入到上述字串中,得到如下字串:
account=Myaccount&role=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&Zone=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&_timestamp=1373421978 &_encode=base64 &_rnd=50931025306
之后,将服务器的URL路径附加到字串前,以?链接参数和服务器路径(此为是常规URL方式传参的规则):
http://app.jxsj.xoyo.com/app/api/bridge?account=Myaccount&role=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&Zone=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&_timestamp=1373421978&_encode=base64 &_rnd=50931025306。
之后,计算以上字串的校验值,计算以上字串的32位小写MD5摘要MD5_STRING,得到MD5_STRING =421976053dd36d41f47f210c77fe1b23,将MD5_STRING与约定的密文拼接成新的字串,这里假设密文为__KINGSOFT__,则得到新字串:421976053dd36d41f47f210c77fe1b23__KINGSOFT__,计算新字串的MD5值作为校验值,即计算421976053dd36d41f47f210c77fe1b23__KINGSOFT__的MD5值,所得校验值为2466e3c32505f26b852499905aa5fc76。
之后,将校验值添加到所计算的字串中,组成最终的URL字串:
http://app.jxsj.xoyo.com/app/api/bridge?account=Myaccount&role=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&Zone=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&_timestamp=1373421978&_encode=base64&_rnd=50931025306&_check=2466e3c32505f26b852499905aa5fc76。
之后,客户端通过此字串向服务端发起请求。
之后,服务端收到上述字串后,即接收到URL请求后,查看其时间戳,验证时间是否过期(这里服务器可以自行设定一个过期时间),如果过期,则直接丢弃此请求,否则,将URL中的校验值去除,余下的其他数据为 URL请求字串,去除校验值之后的字串如下:
http://app.jxsj.xoyo.com/app/api/bridge?account=Myaccount&role=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&Zone=%E7%94%B5%E4%BF%A1%E5%8C%BA1%E6%9C%8D&_timestamp=1373421978&_encode=base64 &_rnd=50931025306。
之后,计算此URL请求字串的32位小写MD5摘要MD5_STRING,所得上MD5_STRING为:421976053dd36d41f47f210c77fe1b23。
之后, 计算MD5_STRING与约定密文拼接后的MD5值,其中,拼接后的字串为421976053dd36d41f47f210c77fe1b23__KINGSOFT__,计算所得的MD5为2466e3c32505f26b852499905aa5fc76。
之后,对比此MD5值是否为请求中最先去除的校验值,如果相同,表明此请求有效,服务器回应相应数据给客户端,本实施例中服务端计算的结果是2466e3c32505f26b852499905aa5fc76,与最先去除的校验值相同,因此服务器返回用户所需要的数据,即本实施便中玩家的等级。若MD5值不同则表明请求是一个伪造的或不正确的请求,服务器可以拒绝回应此请求。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。