一种基于HTTP协议的通信方法及***
技术领域
本发明属于通信技术领域,涉及一种基于HTTP协议的通信方法及***。
背景技术
现在貌似大多数网站用户认证主要包括两种方式:
一.基于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很可能被恶意第三方截取盗用。并且基于HTTP协议的客户端和服务端之间的通信,为了简化方法的定义和路由的解析,通常采用Action参数绑定技术。Action参数绑定技术是指客户端在请求页面或者请求URL(统一资源定位符)里指定一个参数来绑定到服务端的某一个处理方法,由这个处理方法来处理该请求页面。使得客户端对服务端的请求页面也很容易被恶意第三方盗用截取。
如果第三方用截取盗用的授信凭证,同时就用客户端原来的请求页面对服务端发起请求,服务端难以识别到该客户端请求为恶意第三方的请求,从而接收并响应恶意第三方的请求,威胁网络完全。
发明内容
本发明为了解决上述技术问题,提出一种基于HTTP协议的通信方法,其特征在于,包括:
步骤S1,客户端发送客户端请求报文至服务端,请求所述服务端执行由所述客户端请求报文指定的操作方法;
步骤S2,所述服务端发送服务端响应报文至所述客户端,通知所述客户端执行所述操作方法所需的输入参数;所述服务端响应报文包括所述输入参数的参数名、与所述输入参数对应的临时参数的参数名;
步骤S3,所述客户端发送客户端提交报文至所述服务端,所述客户端提交报文包括临时参数信息,所述临时参数信息包括临时参数的参数名和参数值;
步骤S4,所述服务端接收所述客户端提交报文,根据所述临时参数的参数名在对应关系数据库中检索所述临时参数对应的输入参数;如果检索成功,将所述临时参数的参数值作为所述输入参数的参数值并且执行所述操作方法;如果检索失败,则拒绝执行所述操作方法;所述对应关系数据库存储所述输入参数和所述临时参数的对应关系的对应关系数据库。
作为优选,所述步骤S2中,所述服务端将随机生成的字符串作为所述输入参数的对应的临时参数的参数名,并将所述输入参数的参数名和所述临时参数的参数名的对应关系添加至所述对应关系数据库;所述步骤S4中,如果检索成功,所述服务端将所述对应关系数据库中所述输入参数与其对应的临时参数之间的对应关系删除。
作为优选,所述步骤S2中,所述服务端响应报文包括资源地址信息;所述步骤S3包括:
步骤S3-1,接收所述服务端响应报文;
步骤S3-2,访问所述资源地址信息指定的资源地址;
步骤S3-3,根据所述资源地址的页面输入的信息,确定所述输入参数的参数值;
步骤S3-4,将所述输入参数的参数值作为所述输入参数对应的临时参数的参数值,并且发送所述客户端提交报文至所述服务端。
作为优选,所述客户端提交报文包括资源地址信息,所述资源地址信息包括所述临时参数信息。
作为优选,所述客户端提交报文包括请求内容部分,所述请求内容部分包括所述临时参数信息。
本发明还提供一种基于HTTP协议的通信***,包括基于HTTP协议通信的客户端和服务端,所述服务器根据所述客户端发送的客户端提交报文执行所述客户端请求的操作方法,其特征在于:所述客户端提交报文包括临时参数信息,所述临时参数信息包括临时参数的参数名和参数值;所述服务器包括执行模块、对应关系数据库;所述对应关系数据库存储输入参数和临时参数的对应关系;所述执行模块包括解析单元,所述解析单元在所述对应关系数据库中检索所述临时参数对应的输入参数,如果检索成功,所述执行单元将所述临时参数的参数值作为对应的所述的输入参数的参数值以执行所述操作方法;如果检索失败,则服务端拒绝执行所述操作方法。
作为优选,所述服务端发送服务端响应报文响应来自所述客户端的客户端请求报文;所述服务端响应报文包括执行所述操作方法所需的输入参数的参数名、与所述输入参数对应的临时参数的参数名;
所述服务端包括临时参数生成模块;所述临时参数生成模块随机生成字符串并将所述字符串作为所述输入参数的对应的临时参数的参数名,并将所述输入参数的参数名和所述临时参数的参数名的对应关系添加至所述对应关系数据库;
所述服务端包括删除模块,所述删除模块在检索成功到所述临时参数对应的输入参数后,删除所述对应关系数据库中所述输入参数与其对应的临时参数之间的对应关系。
作为优选,所述服务端响应报文包括资源地址信息;所述客户端包括访问单元、提交单元、转换单元,所述访问单元访问所述资源地址信息指定的资源地址,所述提交单元根据所述资源地址的页面输入的信息确定所述服务端响应报文中的所述输入参数的参数值,所述转换单元将所述输入参数的参数值作为所述输入参数对应的所述临时参数的参数值,并将所述临时参数的参数值通过所述客户端提交报文发送至所述服务端。
作为优选,所述客户端提交报文包括资源地址信息,所述资源地址信息包括所述临时参数信息。
作为优选,所述客户端提交报文包括请求内容部分,所述请求内容部分包括所述临时参数信息。
附图说明
图1是本发明的通信方法的流程图。
图2为图1中步骤4的流程图。
具体实施方式
以下具体实施例仅仅是对本发明的解释,其并不是对本发明的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本发明的权利要求范围内都受到专利法的保护。
实施例一
一种基于HTTP协议的通信***,包括基于HTTP协议通信的客户端和服务端。
为了简化操作方法的定义甚至简化路由的解析,本实施例的通信***采用Action参数绑定技术,把URL(统一资源定位符)中的参数名称(不包括模块、控制器和操作名)和服务端的操作方法的参数名称(执行该操作方法所需的输入参数)进行绑定。
服务端包括执行模块、对应关系数据库、临时参数生成模块和删除模块。对应关系数据库存储输入参数和临时参数的对应关系。客户端包括访问单元、提交单元、转换单元。
基于本实施例的通信***的通信方法包括:
步骤S1,客户端发送客户端请求报文至服务端,请求服务端执行由客户端请求报文指定的操作方法。
客户端以GET方式发送客户端请求报文至服务端,客户端请求报文中包含有客户端需要请求服务端执行的操作方法的操作方法名称。例如,服务端的 Blog控制器定义了操作方法archive,由于archive方法需要指定年份(参数名为“year“)和月份(参数名为“month”)两个参数。那么我们可以如下定义:
那么客户端请求报文请求执行服务端的archive方法时,可以在客户端请求报文中指定该操作方法的方法名称“archive”。
步骤S2,服务端发送服务端响应报文至客户端,通知客户端执行操作方法所需的输入参数;服务端响应报文包括输入参数的参数名、与输入参数对应的临时参数的参数名。
服务端的临时参数生成模块为客户端请求的操作方法所需的输入参数分配一临时参数。例如,临时参数生成模块将随机生成的字符串“eZ1gadf2”作为archive方法的输入参数year对应的临时参数的参数名(即为输入参数 year分配一名为eZ1gadf2的临时参数),经随机生成的字符串“dh018sh9”作为archive方法的输入参数month对应的临时参数的参数名(即为输入参数 month分配一名为dh018sh9的临时参数)。服务端响应报文应包括执行客户端的操作方法所需访问的资源地址信息,以及执行客户端请求的操作方法所需的输入参数的参数名与其临时参数的参数名的对应关系。例如,执行操作方法 archive的资源访问地址(即URL地址) http://serverName/index.php/Home/Blog/archive,以及输入参数year的参数名与其临时参数的参数名的对应关系:“year=eZ1gadf2”,输入参数month的参数名与其临时参数的参数名的对应关系:“month=dh018sh9”。并且将该输入参数的参数名和其对应的临时参数的参数名的对应关系添加至对应关系数据库。
步骤S3,客户端发送客户端提交报文至服务端,客户端提交报文包括临时参数信息,临时参数信息包括临时参数的参数名和参数值。
步骤S3-1,接收所述服务端响应报文。
步骤S3-2,访问所述资源地址信息指定的资源地址。客户端根接收到服务器的服务端响应报文以后,客户端的访问单元(通常为浏览器)访问服务端响应报文中的URL(http://serverName/index.php/Home/Blog/archive)指向的资源。
步骤S3-3,根据所述资源地址的页面输入的信息,确定所述输入参数的参数值;用户在该资源页面中输入信息并提交以后,客户端的提交单元根据资源地址的页面输入的信息(如年份信息为“2017”和月份信息为“6”)确定服务端响应报文中的输入参数的参数值(例如year=2017,month=6)。
步骤S3-4,将所述输入参数的参数值作为所述输入参数对应的临时参数的参数值,并且发送所述客户端提交报文至所述服务端。客户端的转换单元根据附在服务端响应报文中的输入参数名和其对应的临时参数名的对应关系(本实施例中为“year=eZ1gadf2”和“month=dh018sh9”)将输入参数的参数值作为输入参数对应的临时参数的参数值,即eZ1gadf2=2017,dh018sh9=6”。最后,将临时参数的参数值通过客户端提交报文发送至服务端。本实例中客户端采用GET方式进行提交,即将临时参数eZ1gadf2和dh018sh9的值附在客户端提交报文的URL后面,利用一个问号“?”代表URL的结尾与输入参数的开始,如“http://serverName/index.php/Home/Blog/archive? eZ1gadf2=2017&dh018sh9=6”,这样将输入参数的值通过URL地址直接传递给服务端。
步骤S4,服务端接收客户端提交报文,根据临时参数的参数名在对应关系数据库中检索临时参数对应的输入参数;如果检索成功,将临时参数的参数值作为输入参数的参数值并且执行操作方法;如果检索失败,则拒绝执行操作方法;对应关系数据库存储输入参数和临时参数的对应关系的对应关系数据库。
服务端的执行模块包括解析单元,解析单元在对应关系数据库中检索临时参数eZ1gadf2和临时参数dh018sh9对应的参数名,以确定这两个临时参数对应的输入参数。如果检索成功,则执行单元将临时参数的参数值作为对应的输入参数的参数值(即另year=2017,month=6)以执行操作方法archive,并且由服务端的删除模块在检索成功到临时参数对应的输入参数后,删除对应关系数据库中该输入参数与其对应的临时参数之间的对应关系;如果检索失败,则服务端拒绝执行操作方法。
基于本实施例的通信***和方法,如果恶意第三方视图截取并重用授信凭证,同时请求客户端原来的请求页面。虽然恶意第三方能够通过授信凭证的检查,但是由于服务端上输入参数与临时参数的对应关系是临时的,在执行客户端原来请求的页面时服务端已不存在该输入参数与临时参数的对应关系,也就找不到该临时参数对应的真正的输入参数,使得恶意第三方请求的操作方法没有办法执行。
实施例二
一种基于HTTP协议的通信***,包括基于HTTP协议通信的客户端和服务端。本实施中同样采用了Action参数绑定技术,再此不再赘述。
服务端包括执行模块、对应关系数据库、临时参数生成模块和删除模块。对应关系数据库存储输入参数和临时参数的对应关系。客户端包括访问单元、提交单元、转换单元。
基于本实施例的通信***的通信方法包括:
步骤S1,客户端发送客户端请求报文至服务端,请求服务端执行由客户端请求报文指定的操作方法。
客户端以POST方式发送客户端请求报文至服务端,客户端请求报文中包含有客户端需要请求服务端执行的操作方法的操作方法名称。例如,服务端的 Blog控制器定义了操作方法archive,由于archive方法需要指定年份(参数名为“year“)和月份(参数名为“month”)两个参数。那么我们可以如下定义:
那么客户端请求报文请求执行服务端的archive方法时,可以在客户端请求报文中指定该操作方法的方法名称“archive”。
步骤S2,服务端发送服务端响应报文至客户端,通知客户端执行操作方法所需的输入参数;服务端响应报文包括输入参数的参数名、与输入参数对应的临时参数的参数名。
服务端的临时参数生成模块为客户端请求的操作方法所需的输入参数分配一临时参数。例如,临时参数生成模块将随机生成的字符串“eZ1gadf2”作为archive方法的输入参数year对应的临时参数的参数名(即为输入参数 year分配一名为eZ1gadf2的临时参数),经随机生成的字符串“dh018sh9”作为archive方法的输入参数month对应的临时参数的参数名(即为输入参数 month分配一名为dh018sh9的临时参数)。服务端响应报文应包括执行客户端的操作方法所需访问的资源地址信息,以及执行客户端请求的操作方法所需的输入参数的参数名与其临时参数的参数名的对应关系。例如,执行操作方法 archive的资源访问地址(即URL地址) http://serverName/index.php/Home/Blog/archive,以及输入参数year的参数名与其临时参数的参数名的对应关系:“year=eZ1gadf2”,输入参数month的参数名与其临时参数的参数名的对应关系:“month=dh018sh9”。并且将该输入参数的参数名和其对应的临时参数的参数名的对应关系添加至对应关系数据库。
步骤S3,客户端发送客户端提交报文至服务端,客户端提交报文包括临时参数信息,临时参数信息包括临时参数的参数名和参数值。
步骤S3-1,接收所述服务端响应报文。
步骤S3-2,访问所述资源地址信息指定的资源地址。客户端根接收到服务器的服务端响应报文以后,客户端的访问单元(通常为浏览器)访问服务端响应报文中的URL(http://serverName/index.php/Home/Blog/archive)指向的资源。
步骤S3-3,根据所述资源地址的页面输入的信息,确定所述输入参数的参数值;用户在该资源页面中输入信息并提交以后,客户端的提交单元根据资源地址的页面输入的信息(如年份信息为“2017”和月份信息为“6”)确定服务端响应报文中的输入参数的参数值(例如year=2017,month=6)。
步骤S3-4,将所述输入参数的参数值作为所述输入参数对应的临时参数的参数值,并且发送所述客户端提交报文至所述服务端。客户端的转换单元根据附在服务端响应报文中的输入参数名和其对应的临时参数名的对应关系(本实施例中为“year=eZ1gadf2”和“month=dh018sh9”)将输入参数的参数值作为输入参数对应的临时参数的参数值,即eZ1gadf2=2017,dh018sh9=6”。最后,将临时参数的参数值通过客户端提交报文发送至服务端。本实例中客户端采用POST方式进行提交,即将临时参数eZ1gadf2和dh018sh9的值封装在客户端提交报文的请求数据中。例如:
<form action="xxxxxxx"method="post">
<input type="archive"name="eZ1gadf2"value="2017"/>
<input type="archive"name="dh018sh9"value="6"/>
这样将输入参数的值通过URL地址直接传递给服务端。
步骤S4,服务端接收客户端提交报文,根据临时参数的参数名在对应关系数据库中检索临时参数对应的输入参数;如果检索成功,将临时参数的参数值作为输入参数的参数值并且执行操作方法;如果检索失败,则拒绝执行操作方法;对应关系数据库存储输入参数和临时参数的对应关系的对应关系数据库。
服务端的执行模块包括解析单元,解析单元在对应关系数据库中检索临时参数eZ1gadf2和临时参数dh018sh9对应的参数名,以确定这两个临时参数对应的输入参数。如果检索成功,则执行单元将临时参数的参数值作为对应的输入参数的参数值(即另year=2017,month=6)以执行操作方法archive,并且由服务端的删除模块在检索成功到临时参数对应的输入参数后,删除对应关系数据库中该输入参数与其对应的临时参数之间的对应关系;如果检索失败,则服务端拒绝执行操作方法。
基于本实施例的通信***和方法,如果恶意第三方视图截取并重用授信凭证,同时请求客户端原来的请求页面。虽然恶意第三方能够通过授信凭证的检查,但是由于服务端上输入参数与临时参数的对应关系是临时的,在执行客户端原来请求的页面时服务端已不存在该输入参数与临时参数的对应关系,也就找不到该临时参数对应的真正的输入参数,使得恶意第三方请求的操作方法没有办法执行。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。