一种跨窗口提交数据的方法及系统
技术领域
本发明涉及计算机网络领域,尤其涉及一种跨窗口提交数据的方法及系统。
背景技术
跨窗口指的是某项服务可以应用于多个窗口,用户访问页面时需要打开新的窗口进程并在该新的窗口继续操作,由于跨窗口,用户的sessionid不同了,无法获取原有数据,这样导致用户无法继续操作。目前有一种直接在新窗口get请求并带上全部参数,这样虽然能实现数据传输,但不安全,容易受到跨站攻击(Cross Site Script Execution),从而导致了用户数据的安全性低的技术问题。
发明内容
本发明实施例提供了一种跨窗口提交数据的方法及系统,解决了目前直接在新窗口get请求并带上全部参数,虽然能实现数据传输,但导致了不安全,容易受到跨站攻击,用户数据的安全性低的技术问题。
本发明实施例中提供的一种跨窗口提交数据的方法,包括:
通过旧窗口将提交数据传输至服务器进行缓存,并获取与所述提交数据对应的唯一字符串;
根据所述唯一字符串进行新窗口的HTML表单设置,并提交所述HTML表单通过携带有所述唯一字符串的访问地址进入所述新窗口;
当打开所述新窗口之后,将所述新窗口的所述唯一字符串发送至所述服务器进行验证,若成功,则通过所述服务器获取与所述唯一字符串对应的所述提交数据。
可选地,通过旧窗口将提交数据传输至服务器进行缓存,并获取与所述提交数据对应的唯一字符串具体包括:
在所述旧窗口通过ajax方式将所述提交数据以post方式上报至所述服务器;
通过所述服务器将所述提交数据缓存至redis中,并获取与所述提交数据对应的token字符串。
可选地,通过所述服务器将所述提交数据缓存至redis中,并获取与所述提交数据对应的token字符串具体包括:
通过所述服务器根据UUID方式生成唯一的前缀字符串;
通过所述服务器按照本地IP+密钥的方式的字符串用签名方法计算签名;
通过所述服务器将所述提交数据以key-value数据的形式缓存至redis,其中,key为所述前缀字符串+所述本地IP,value为所述提交数据对应的json字符串;
通过所述服务器获取形式为前缀字符串-签名的所述token字符串。
可选地,根据所述唯一字符串进行新窗口的HTML表单设置,并提交所述HTML表单通过携带有所述唯一字符串的访问地址进入所述新窗口具体包括:
根据所述token字符串进行新窗口的HTML表单设置,并提交所述HTML表单通过携带有所述token字符串的访问地址进入所述新窗口。
可选地,当打开所述新窗口之后,将所述新窗口的所述唯一字符串发送至所述服务器进行验证,若成功,则通过所述服务器获取与所述唯一字符串对应的所述提交数据具体包括:
当打开所述新窗口之后,将所述新窗口的所述token字符串发送至所述服务器;
通过所述服务器按照所述本地IP+密钥的方式的字符串计算实时签名,与所述token字符串的所述签名进行对比,若所述实时签名与所述签名一致,则通过所述服务器从redis采用key获取与所述json字符串对应的所述提交数据;
通过所述服务器将redis的所述key-value数据进行删除。
本发明实施例中提供的一种跨窗口提交数据的系统,包括:客户端和服务器;
所述客户端包括:
获取单元,用于通过旧窗口将提交数据传输至服务器进行缓存,并获取与所述提交数据对应的唯一字符串;
设置单元,用于根据所述唯一字符串进行新窗口的HTML表单设置,并提交所述HTML表单通过携带有所述唯一字符串的访问地址进入所述新窗口;
验证单元,用于当打开所述新窗口之后,将所述新窗口的所述唯一字符串发送至所述服务器进行验证,若成功,则通过所述服务器获取与所述唯一字符串对应的所述提交数据。
可选地,所述获取单元包括:
上报子单元,用于在所述旧窗口通过ajax方式将所述提交数据以post方式上报至所述服务器;
第一获取子单元,用于通过所述服务器将所述提交数据缓存至redis中,并获取与所述提交数据对应的token字符串。
可选地,所述服务器包括:
生成单元,用于根据UUID方式生成唯一的前缀字符串;
签名计算单元,用于按照本地IP+密钥的方式的字符串用签名方法计算签名;
缓存单元,用于将所述提交数据以key-value数据的形式缓存至redis,其中,key为所述前缀字符串+所述本地IP,value为所述提交数据对应的json字符串;
发送单元,用于将形式为前缀字符串-签名的所述token字符串发送给所述客户端。
可选地,设置单元,具体用于根据所述token字符串进行新窗口的HTML表单设置,并提交所述HTML表单通过携带有所述token字符串的访问地址进入所述新窗口。
可选地,验证单元具体包括:
发送子单元,用于当打开所述新窗口之后,将所述新窗口的所述token字符串发送至所述服务器;
第二获取子单元,用于当通过所述服务器用按照所述本地IP+密钥的方式的字符串计算实时签名,与所述token字符串的所述签名进行对比之后,若所述实时签名与所述签名一致,则获取到通过所述服务器从redis采用key获取与所述json字符串对应的所述提交数据。
可选地,所述服务器还包括:
删除单元,用于当所述客户端获取所述实时签名与所述签名对比一致之后,将redis的所述key-value数据进行删除。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例提供了一种跨窗口提交数据的方法及系统,其中,跨窗口提交数据的方法包括:通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串;根据唯一字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有唯一字符串的访问地址进入新窗口;当打开新窗口之后,将新窗口的唯一字符串发送至服务器进行验证,若成功,则通过服务器获取与唯一字符串对应的提交数据。本实施例中,通过先将在旧窗口提交的提交数据进行缓存,当打开新窗口之后,将新窗口的唯一字符串发送至服务器进行验证,成功之后,再将提交数据发送至新窗口,实现了高安全性的跨窗口提交数据,解决了目前直接在新窗口get请求并带上全部参数,虽然能实现数据传输,但导致了不安全,容易受到跨站攻击,用户数据的安全性低的技术问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种跨窗口提交数据的方法的一个实施例的流程示意图;
图2为本发明实施例提供的一种跨窗口提交数据的方法的另一个实施例的流程示意图;
图3为本发明实施例提供的一种跨窗口提交数据的系统的一个实施例的流程示意图;
图4为本发明实施例提供的一种跨窗口提交数据的系统的另一个实施例的流程示意图;
图5(a)至图5(c)为图2实施例的一个应用例场景示意图。
具体实施方式
本发明实施例提供了一种跨窗口提交数据的方法及系统,解决了目前直接在新窗口get请求并带上全部参数,虽然能实现数据传输,但导致了不安全,容易受到跨站攻击,用户数据的安全性低的技术问题。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在有些游戏中,需要进行充值购买物品等等,通常是在旧的访问界面发送支付请求,旧访问界面提交支付数据给服务器,再通过服务器接入新的窗口完成整个提交并支付。
请参阅图1,本发明实施例提供的一种跨窗口提交数据的方法的一个实施例包括:
101、通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串;
本实施例中,当需要跨窗口提交数据时,首先通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串。
102、根据唯一字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有唯一字符串的访问地址进入新窗口;
当通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串之后,需要根据唯一字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有唯一字符串的访问地址进入新窗口。
103、当打开新窗口之后,将新窗口的唯一字符串发送至服务器进行验证,若成功,则执行步骤104;
当根据唯一字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有唯一字符串的访问地址进入新窗口之后,需要将新窗口的唯一字符串发送至服务器进行验证,若成功,则执行步骤104。
104、通过服务器获取与唯一字符串对应的提交数据。
当将新窗口的唯一字符串发送至服务器进行验证成功之后,需要通过服务器获取与唯一字符串对应的提交数据。
本实施例中,通过先将在旧窗口提交的提交数据进行缓存,当打开新窗口之后,将新窗口的唯一字符串发送至服务器进行验证,成功之后,再将提交数据发送至新窗口,实现了高安全性的跨窗口提交数据,解决了目前直接在新窗口get请求并带上全部参数,虽然能实现数据传输,但导致了不安全,容易受到跨站攻击,用户数据的安全性低的技术问题。
上面是对跨窗口提交数据的方法的过程进行详细的描述,下面将对通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串的过程进行详细的描述,请参阅图2,本发明实施例提供的一种跨窗口提交数据的方法的另一个实施例包括:
201、在旧窗口通过ajax方式将提交数据以post方式上报至服务器;
本实施例中,当需要跨窗口提交数据时,首先在旧窗口通过ajax方式将提交数据以post方式上报至服务器。
202、通过服务器根据UUID方式生成唯一的前缀字符串;
当在旧窗口通过ajax方式将提交数据以post方式上报至服务器之后,需要通过服务器根据UUID方式生成唯一的前缀字符串,例如用UUID方法生成唯一的字符串aaaa。
203、通过服务器按照本地IP+密钥的方式的字符串用签名方法计算签名;
当通过服务器根据UUID方式生成唯一的前缀字符串之后,需要通过服务器按照本地IP+密钥的方式的字符串用签名方法计算签名,例如对客户端IP+密钥的字符串用签名方法计算签名bb。
204、通过服务器将提交数据以key-value数据的形式缓存至redis;
当通过服务器按照本地IP+密钥的方式的字符串用签名方法计算签名之后,需要通过服务器将提交数据以key-value数据的形式缓存至redis,其中,key为前缀字符串+本地IP,value为提交数据对应的json字符串,例如以key-value形式存数据入redis,key为aaaa+用户ip,value为上报数据的json字符串,并设置一个预置过期时间,如10秒等,此处具体不做限定。
205、通过服务器获取形式为前缀字符串-签名的token字符串;
当通过服务器将提交数据以key-value数据的形式缓存至redis之后,需要通过服务器获取形式为前缀字符串-签名的token字符串,例如获取到服务器返回的token字符串为aaaa-bb。
206、根据token字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有token字符串的访问地址进入新窗口;
当通过服务器获取形式为前缀字符串-签名的token字符串之后,需要根据token字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有token字符串的访问地址进入新窗口,前述的TML表单可以是在页面的HTML元素设置为:
<form method="get"id="form"action="http://aa.com/xx.do"target="_blank">
<input value="aaaa-bb"type="hidden"id="token"name="token"/>
</form>
207、将新窗口的token字符串发送至服务器;
当打开新窗口之后,将新窗口的token字符串发送至服务器,
208、通过服务器按照本地IP+密钥的方式的字符串计算实时签名,与token字符串的签名进行对比,若实时签名与签名一致,则执行步骤210;
当根据唯一字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有唯一字符串的访问地址进入新窗口之后,需要通过服务器按照本地IP+密钥的方式的字符串计算实时签名,与token字符串的签名进行对比,若实时签名与签名一致,则执行步骤210。
209、通过服务器从redis采用key获取与json字符串对应的提交数据;
当通过服务器按照本地IP+密钥的方式的字符串计算实时签名,与token字符串的签名进行对比,若实时签名与签名一致之后,需要通过服务器从redis采用key获取与json字符串对应的提交数据。
210、通过服务器将redis的key-value数据进行删除。
当通过服务器从redis采用key获取与json字符串对应的提交数据之后,需要通过服务器将redis的key-value数据进行删除。
本实施例中,通过先将在旧窗口提交的提交数据进行缓存,当打开新窗口之后,将新窗口的唯一字符串发送至服务器进行验证,成功之后,再将提交数据发送至新窗口,实现了高安全性的跨窗口提交数据,解决了目前直接在新窗口get请求并带上全部参数,虽然能实现数据传输,但导致了不安全,容易受到跨站攻击,用户数据的安全性低的技术问题,以及获取到提交数据后,通过服务器将redis的key-value数据进行删除,使得token数据为一次性使用,大大地保障了用户数据的安全性。
上面是通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串的过程进行详细的描述,为了便于理解,下面将以一具体应用场景对图2所示的实施例进行详细的描述,应用例包括:
a.用户点击“立即支付”按钮,见图5(a);
b.页面会执行下面js,并调起等待页面,见图5(b);
页面有个html元素:
用户点击页面确认按钮提交数据时,页面会执行以下js方法先把数据传输到服务器,然后获取提交数据对应的token字符串。
c.服务器缓存数据;
数据上传上来,用以下方法缓存数据并生成token:
(1)用UUID方法生成唯一的字符串aaaa;
(2)对用户ip+密钥的字符串用签名方法计算签名bb;
(3)以key-value形式存数据入redis,key为aaaa+用户ip,value为上报数据的json字符串,并设置10秒过期。
(4)返回token为aaaa-bb。
d.执行$("#form").submit();这个方法后,就会在新浏览器的窗口打开http://aa.com/xx.do?token=aaaa-bb;
e.服务器获取到token:aaaa-bb,用当前用户ip+密钥算签名跟bb比较,相等则从redis用key:aaaa+用户ip,获取对应订单信息,并删除redis的这个数据,确保token只用一次。
f.下单后,页面再重定向到网银,用户付款,见图5(c)。
请参阅图3,本发明实施例中提供的一种跨窗口提交数据的系统的一个实施例包括:
客户端31和服务器32;
客户端31包括:
获取单元311,用于通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串;
设置单元312,用于根据唯一字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有唯一字符串的访问地址进入新窗口;
验证单元313,用于当打开新窗口之后,将新窗口的唯一字符串发送至服务器进行验证,若成功,则通过服务器获取与唯一字符串对应的提交数据。
本实施例中,通过获取单元311先将在旧窗口提交的提交数据进行缓存,当打开新窗口之后,验证单元313将新窗口的唯一字符串发送至服务器进行验证,成功之后,再将提交数据发送至新窗口,实现了高安全性的跨窗口提交数据,解决了目前直接在新窗口get请求并带上全部参数,虽然能实现数据传输,但导致了不安全,容易受到跨站攻击,用户数据的安全性低的技术问题。
上面是对跨窗口提交数据的系统的各单元进行详细的描述,下面将对子单元及服务器的组成进行详细的描述,请参阅图4,本发明实施例中提供的一种跨窗口提交数据的系统的另一个实施例包括:
客户端41和服务器42;
客户端41包括:
获取单元411,用于通过旧窗口将提交数据传输至服务器进行缓存,并获取与提交数据对应的唯一字符串;
获取单元411包括:
上报子单元4121,用于在旧窗口通过ajax方式将提交数据以post方式上报至服务器;
第一获取子单元4122,用于通过服务器将提交数据缓存至redis中,并获取与提交数据对应的token字符串。
设置单元412,用于根据唯一字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有唯一字符串的访问地址进入新窗口,设置单元412,具体用于根据token字符串进行新窗口的HTML表单设置,并提交HTML表单通过携带有token字符串的访问地址进入新窗口。
验证单元413,用于当打开新窗口之后,将新窗口的唯一字符串发送至服务器进行验证,若成功,则通过服务器获取与唯一字符串对应的提交数据。
验证单元413具体包括:
发送子单元4131,用于当打开新窗口之后,将新窗口的token字符串发送至服务器;
第二获取子单元4132,用于当通过服务器用按照本地IP+密钥的方式的字符串计算实时签名,与token字符串的签名进行对比之后,若实时签名与签名一致,则获取到通过服务器从redis采用key获取与json字符串对应的提交数据。
服务器42包括:
生成单元421,用于根据UUID方式生成唯一的前缀字符串;
签名计算单元422,用于按照本地IP+密钥的方式的字符串用签名方法计算签名;
缓存单元423,用于将提交数据以key-value数据的形式缓存至redis,其中,key为前缀字符串+本地IP,value为提交数据对应的json字符串;
发送单元424,用于将形式为前缀字符串-签名的token字符串发送给客户端。
删除单元425,用于当客户端获取实时签名与签名对比一致之后,将redis的key-value数据进行删除。
本实施例中,通过获取单元411先将在旧窗口提交的提交数据进行缓存,当打开新窗口之后,验证单元413将新窗口的唯一字符串发送至服务器进行验证,成功之后,再将提交数据发送至新窗口,实现了高安全性的跨窗口提交数据,解决了目前直接在新窗口get请求并带上全部参数,虽然能实现数据传输,但导致了不安全,容易受到跨站攻击,用户数据的安全性低的技术问题,以及获取到提交数据后,删除单元425通过服务器将redis的key-value数据进行删除,使得token数据为一次性使用,大大地保障了用户数据的安全性。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。