一种转发HTTP请求的方法及装置转让专利

申请号 : CN201010603366.X

文献号 : CN102571846B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 叶润国胡振宇

申请人 : 北京启明星辰信息技术股份有限公司北京启明星辰信息安全技术有限公司

摘要 :

一种转发HTTP请求的方法及装置;方法包括:判断Web客户端的HTTP请求的URL是否为Web表单请求URL或Web表单数据提交URL;当所述HTTP请求的URL为Web表单请求URL时,如果该HTTP请求的URL参数中携带了有效的令牌,则转发该HTTP请求;如果未携带令牌则随机生成一个唯一的令牌,将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求存在Referer值,并且从Referer中可以提取出有效的令牌,则转发该HTTP请求。本发明能够实现对CSRF攻击的有效防御,大大减轻Web安全网关的计算开销。

权利要求 :

1.一种Web安全网关转发HTTP请求的方法,包括:

判断Web客户端的HTTP请求的URL是否为Web表单请求URL或Web表单数据提交URL;

当所述HTTP请求的URL为Web表单请求URL时,如果该HTTP请求的URL参数中携带了有效的令牌,则转发该HTTP请求给受保护Web应用系统;受保护的Web应用系统接收到该HTTP请求后,向Web客户端返回一个HTTP响应消息,该HTTP响应消息中包含Web表单,用户填写完该Web表单并提交后,Web客户端生成URL为该Web表单所对应的Web表单数据提交URL的HTTP请求,并将该URL为Web表单数据提交URL的HTTP请求的Referer值设置为所述URL为Web表单请求URL的HTTP请求所对应的完整URL;如果未携带令牌则随机生成一个唯一的令牌,将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;

当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求存在Referer值,并且从Referer中可以提取出有效的令牌,则转发该HTTP请求。

2.如权利要求1所述的方法,其特征在于:

所述Web表单请求URL是指包含Web表单的Web页面所对应的URL;

所述Web表单数据提交URL是指用来处理Web表单数据的动态Web页面所对应的URL。

3.如权利要求1所述的方法,其特征在于,还包括:

当Web客户端的HTTP请求的URL为Web表单请求URL时,如果URL参数携带了无效的令牌则报警;

当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求不存在Referer,则丢弃该HTTP请求;如果该HTTP请求存在Referer,但从Referer中提取不出令牌则丢弃该HTTP请求;如果从Referer中提取出 无效的令牌则丢弃该HTTP请求并报警。

4.如权利要求3所述的方法,其特征在于,所述随机生成一个令牌的步骤后还包括:保存该令牌的名字和值对;

所述令牌有效/无效是指:

所保存的令牌中,与所述令牌名字相同的令牌的值对,与所述令牌的值对相同/不相同。

5.如权利要求1到4中任一项所述的方法,其特征在于,所述将HTTP请求的URL和令牌拼接成新的URL的步骤包括:当所述HTTP请求的URL包括参数时,在该URL的参数串后追加一个或多个“&”字符后再附加上所述令牌的名字和值对,得到新的URL;

当所述HTTP请求的URL没有包括参数时,在该URL后追加一个或多个“?”字符后,再附加上所述令牌的名字和值对,得到新的URL;

当Web客户端的HTTP请求的URL为Web表单请求URL时,所述转发HTTP请求的步骤包括:当所述HTTP请求的URL参数中除了令牌名字和值对还存在其它URL参数时,从该URL参数中删除“&”字符以及其后的令牌的名字和值对;

当所述HTTP请求的URL参数中只包含令牌名字和值对时,从该URL参数中删除“?”字符以及其后的令牌的名字和值对;

删除后转发所述HTTP请求。

6.一种转发HTTP请求的装置,其特征在于,包括:

HTTP请求分类单元,用于判断Web客户端的HTTP请求的URL是否为Web表单请求URL或Web表单数据提交URL;

Web表单请求处理模块,用于当所述HTTP请求的URL为Web表单请求URL时,如果该HTTP请求的URL参数中携带了有效的令牌,则转发该HTTP请求给受保护Web应用系统;受保护的Web应用系统接收到该HTTP 请求后,向Web客户端返回一个HTTP响应消息,该HTTP响应消息中包含Web表单,用户填写完该Web表单并提交后,Web客户端生成URL为该Web表单所对应的Web表单数据提交URL的HTTP请求,并将该URL为Web表单数据提交URL的HTTP请求的Referer值设置为所述URL为Web表单请求URL的HTTP请求所对应的完整URL;

如果未携带令牌则随机生成一个唯一的令牌,将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;

Web表单数据提交处理模块,用于当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求存在Referer值,并且从Referer中可以提取出有效的令牌,则转发该HTTP请求。

7.如权利要求6所述的装置,其特征在于:

所述HTTP请求分类单元将包含Web表单的Web页面所对应的URL判断为所述Web表单请求URL;将用来处理Web表单数据的动态Web页面所对应的URL判断为所述Web表单数据提交URL。

8.如权利要求6所述的装置,其特征在于,所述Web表单请求处理模块包括:第一判断单元,用于当所述HTTP请求的URL为Web表单请求URL时,判断该HTTP请求的URL参数中是否携带了令牌;

第一验证单元,用于当URL参数携带了令牌时验证该令牌的有效性,如果有效则转发该HTTP请求;如果无效则丢弃该HTTP请求并报警;

令牌生成单元,用于当URL参数未携带令牌时随机生成一个唯一的令牌;

重定向单元,用于将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;

所述Web表单数据提交处理模块包括:

第二判断单元,用于当所述HTTP请求的URL为Web表单数据提交URL时,判断所述HTTP请求的Referer值是否存在;如果Referer不存在则丢弃该HTTP请求;

令牌提取单元,用于当Referer存在时从Referer中提取令牌,如果提取不出令牌则丢弃该HTTP请求;

第二验证单元,用于当从Referer中提取出令牌时验证该令牌的有效性,如果有效则转发该HTTP请求;如果无效则报警。

9.如权利要求8所述的装置,其特征在于:

所述令牌生成单元随机生成一个令牌后还用于保存该令牌的名字和值对;

所述第一/第二验证单元验证令牌的有效性是指:

所述第一/第二验证单元在所保存的令牌中,找到与所要验证的令牌的名字相同的令牌;判断所找到的令牌的值对与要验证的令牌的值对是否相等;相等则该令牌有效,不相等则该令牌无效。

10.如权利要求8或9所述的装置,其特征在于,所述重定向单元将HTTP请求的URL和令牌拼接成新的URL是指:所述重定向单元当所述HTTP请求的URL包括参数时,在该URL的参数串后追加一个或多个“&”字符后再附加上所述令牌的名字和值对,得到新的URL;当所述HTTP请求的URL没有包括参数时,在该URL后追加一个或多个“?”字符后,再附加上所述令牌的名字和值对,得到新的URL;

所述第一验证单元转发HTTP请求是指:

所述第一验证单元当所述HTTP请求的URL参数中除了令牌名字和值对还存在其它URL参数时,从该URL参数中删除“&”字符以及其后的令牌的名字和值对;当所述HTTP请求的URL参数中只包含令牌名字和值对时,从该URL参数中删除“?”字符以及其后的令牌的名字和值对;删除后转发所述HTTP请求。

说明书 :

一种转发HTTP请求的方法及装置

技术领域

[0001] 本发明涉及网络安全领域,具体涉及一种转发HTTP请求的方法及装置。

背景技术

[0002] 经过近二十年的发展,当前互联网规模已经非常庞大,特别是作为互联网主要业务之一的Web业务更是得到了极速发展,给人们获取信息带来了极大便利。与此同时,那些为人们提供Web业务的Web网站的安全状况堪忧。常见的安全问题包括SQL(Structured Query Language,结构化查询语言)注入攻击、跨站脚本攻击以及跨站请求伪造等。SQL注入攻击和跨站脚本攻击是由于Web应用程序在使用用户提交的数据时没有进行严格的过滤造成的,随着Web应用系统开发者对这些安全攻击认识的深入,也逐渐加强了对用户数据的严格过滤,因此,这两类Web安全攻击越来越少了。CSRF(Cross Site Request Forgery,跨站请求伪造)攻击则是由Web应用系统安全设计上的缺陷造成的,并且很多人还没有意识到CSRF攻击的严重性,因此CSRF漏洞广泛存在于当前的大多数Web应用系统中。
[0003] 为了帮助本领域普通技术人员能够更好理解CSRF攻击。图1给出了一个CSRF攻击的工作原理图。如图1所示,域名为www.abc.com的信任网站A存在CSRF漏洞,域名为www.hackers.com的恶意网站B将发起针对信任网站A的CSRF攻击。恶意网站B利用受害者的Web客户端向信任网站A发起CSRF攻击的工作流程如下:
[0004] 步骤1:受害者利用标准Web客户端浏览信任网站A并登录信任网站A;
[0005] 步骤2:受害者登录信任网站A成功,信任网站A通过Cookie向受害者Web客户端推送表示登录成功的会话ID;
[0006] 步骤3:受害者在未退出信任网站A登录的情况下,访问恶意网站B;
[0007] 步骤4:恶意网站B向受害者Web客户端返回一个Web页面,该Web页面中包含一个请求信任网站A敏感操作的HTML标签;
[0008] 步骤5:受害者Web客户端在显示来自恶意网站B的Web页面时将在受害者不知情情况下自动向信任网站A提交一个涉及敏感操作的HTTP请求(比如银行转账请求),该HTTP请求同时携带了步骤2中信任网站A推送给受害者Web客户端的Cookie;
[0009] 步骤6信任网站A接收到该HTTP请求后,通过验证Cookie中会话ID发现该Web客户端先前已登录成功,因此处理该HTTP请求,从而达到了攻击者攻击目的。
[0010] 导致CSRF漏洞广泛存在的根源在于以下几点:
[0011] (1)为了避免频繁的身份认证操作给用户体验带来干扰,当前大多数Web应用系统都采用了一种类似于单点登录的身份认证方式,即只要求用户登录一次,登录成功后为用户分配唯一的用户凭证,以后所有需要识别用户身份和鉴别用户权限的敏感操作都只是根据用户凭证来验证该用户是否具有相应权限;
[0012] (2)Web应用系统为登录认证成功后用户分配的唯一用户凭证一般存储在Cookie中,并推送到Web客户端;
[0013] (3)标准Web客户端在向某网站A提交HTTP请求时(包括跨域提交的HTTP请求),会自动在该HTTP请求中携带网站A先前保存在客户端的Cookie信息;
[0014] (4)由于Web应用系统设计上的缺陷,Web应用系统中许多涉及敏感操作的Web表单中的所有数据都是可预先设置的,这使得攻击者可以预先设置数据并自动提交表单。
[0015] 由于CSRF漏洞先前并没有引起人们的重视,因此,CSRF漏洞广泛存在于当前的大多数Web应用系统中。通过修改所有Web应用系统代码来修补所有的CSRF漏洞是不现实的,因此,目前大多采用部署在Web应用系统前的Web安全网关来防御针对Web应用系统的CSRF攻击。目前,实现在Web安全网关上的CSRF防御方法包括:
[0016] (1)Web表单随机令牌方法:当Web安全网关发现Web客户端在请求一个包含Web表单的Web页面时,将主动修改由Web应用系统返回给Web客户端的这个包含Web表单的Web页面,为Web表单添加一个隐含的、随机的和无法事先预测的CSRF令牌;当Web客户端通过另一个Web表单数据提交统一资源定位符URL(Web表单数据提交URL由FORM标签的ACTION属性指定)提交用户输入的Web表单数据时,这个CSRF令牌也将随Web表单数据一起提交;Web安全网关在接收到这个HTTP请求后,将验证这个CSRF令牌的有效性,只有验证通过才允许将该HTTP请求转发给受保护的Web应用系统,由于这个CSRF令牌是必须提交并且无法事先预测的,因此,可以有效防止攻击者通过自动填充和提交表单来实现CSRF攻击;
[0017] (2)图形验证码方法:Web安全网关发现Web客户端在请求一个包含Web表单的Web页面时,将主动修改由Web应用系统返回给Web客户端的这个包含Web表单的Web页面,为Web表单添加一个图形验证码;当Web客户端通过另一个Web表单数据提交URL提交用户输入的Web表单数据时,要求Web用户必须正确输入显示在图形上的由字符或数字组成的验证码串(该验证码串是随机和不可事先预知的),这个验证码串将随Web表单数据一起提交;Web安全网关在接收到这个HTTP请求后,将验证用户提交的图形验证码的有效性,只有验证通过才允许将该HTTP请求转发给受保护的Web应用系统,图形验证码方法不仅可以防止CSRF攻击,还可以防止Web爬虫的表单自动填充攻击。
[0018] (3)Referer验证方法:Web安全网关在接收到Web表单数据处理HTTP请求时,将读取该HTTP请求中的Referer值,只有当Referer值为预先指定的URL时,才允许将该HTTP请求转发给后台受保护的Web应用系统。
[0019] 上述前两种在Web安全网关上实施的传统CSRF防御方法都可以有效的防御CSRF攻击,但是,它都要求Web安全网关实时修改由Web应用系统返回给Web客户端的Web页面中的Web表单。Web完全网关要修改Web页面中的Web表单,则必须对Web页面进行DOM(Document Object Model,文档对象模型)树分析、Web表单定位和Web表单修改等一列复杂操作,这些都将大大降低Web安全网关的性能。更为复杂的是,有些Web页面中的Web表单由客户端脚本(比如Javascript)生成,要实现对这种类型Web表单的正确定位和修改则要求Web安全网关支持客户端脚本解释,因而是很难实现的。第三种Referer验证方法则存在攻击者伪造Referer值而被绕过的风险,因此只能作为一种辅助性的验证方法。

发明内容

[0020] 本发明要解决的技术问题是提供一种转发HTTP请求的方法及装置,可应用在Web安全网关上,无需对返回给Web客户端的包含Web表单的Web页面进行修改,就能够实现对CSRF攻击的有效防御,大大减轻Web安全网关的计算开销。
[0021] 为了解决上述问题,本发明提供了一种Web安全网关转发HTTP请求的方法,包括:
[0022] 判断Web客户端的HTTP请求的URL是否为Web表单请求URL或Web表单数据提交URL;
[0023] 当所述HTTP请求的URL为Web表单请求URL时,如果该HTTP请求的URL参数中携带了有效的令牌,则转发该HTTP请求给受保护Web应用系统;受保护的Web应用系统接收到该HTTP请求后,向Web客户端返回一个HTTP响应消息,该HTTP响应消息中包含Web表单,用户填写完该Web表单并提交后,Web客户端生成URL为该Web表单所对应的Web表单数据提交URL的HTTP请求,并将该URL为Web表单数据提交URL的HTTP请求的referer值设置为所述URL为Web表单请求URL的HTTP请求所对应的完整URL;如果未携带令牌则随机生成一个唯一的令牌,将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;
[0024] 当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求存在Referer值,并且从Referer中可以提取出有效的令牌,则转发该HTTP请求。
[0025] 优选地,所述Web表单请求URL是指包含Web表单的Web页面所对应的URL;
[0026] 所述Web表单数据提交URL是指用来处理Web表单数据的动态Web页面所对应的URL。
[0027] 优选地,所述的方法还包括:
[0028] 当Web客户端的HTTP请求的URL为Web表单请求URL时,如果URL参数携带了无效的令牌则报警;
[0029] 当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求不存在Referer,则丢弃该HTTP请求;如果该HTTP请求存在Referer,但从Referer中提取不出令牌则丢弃该HTTP请求;如果从Referer中提取出无效的令牌则丢弃该HTTP请求并报警。
[0030] 优选地,所述随机生成一个令牌的步骤后还包括:
[0031] 保存该令牌的名字和值对;
[0032] 所述令牌有效/无效是指:
[0033] 所保存的令牌中,与所述令牌名字相同的令牌的值对,与所述令牌的值对相同/不相同。
[0034] 优选地,所述将HTTP请求的URL和令牌拼接成新的URL的步骤包括:
[0035] 当所述HTTP请求的URL包括参数时,在该URL的参数串后追加一个或多个“&”字符后再附加上所述令牌的名字和值对,得到新的URL;
[0036] 当所述HTTP请求的URL没有包括参数时,在该URL后追加一个或多个“?”字符后,再附加上所述令牌的名字和值对,得到新的URL;
[0037] 当Web客户端的HTTP请求的URL为Web表单请求URL时,所述转发HTTP请求的步骤包括:
[0038] 当所述HTTP请求的URL参数中除了令牌名字和值对还存在其它URL参数时,从该URL参数中删除“&”字符以及其后的令牌的名字和值对;
[0039] 当所述HTTP请求的URL参数中只包含令牌名字和值对时,从该URL参数中删除“?”字符以及其后的令牌的名字和值对;
[0040] 删除后转发所述HTTP请求。
[0041] 本发明还提供了一种转发HTTP请求的装置,包括:
[0042] HTTP请求分类单元,用于判断Web客户端的HTTP请求的URL是否为Web表单请求URL或Web表单数据提交URL;
[0043] Web表单请求处理模块,用于当所述HTTP请求的URL为Web表单请求URL时,如果该HTTP请求的URL参数中携带了有效的令牌,则转发该HTTP请求给受保护Web应用系统;受保护的Web应用系统接收到该HTTP请求后,向Web客户端返回一个HTTP响应消息,该HTTP响应消息中包含Web表单,用户填写完该Web表单并提交后,Web客户端生成URL为该Web表单所对应的Web表单数据提交URL的HTTP请求,并将该URL为Web表单数据提交URL的HTTP请求的referer值设置为所述URL为Web表单请求URL的HTTP请求所对应的完整URL;如果未携带令牌则随机生成一个唯一的令牌,将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;
[0044] Web表单数据提交处理模块,用于当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求存在Referer值,并且从Referer中可以提取出有效的令牌,则转发该HTTP请求。
[0045] 优选地,所述HTTP请求分类单元将包含Web表单的Web页面所对应的URL判断为所述Web表单请求URL;将用来处理Web表单数据的动态Web页面所对应的URL判断为所述Web表单数据提交URL。
[0046] 优选地,所述Web表单请求处理模块包括:
[0047] 第一判断单元,用于当所述HTTP请求的URL为Web表单请求URL时,判断该HTTP请求的URL参数中是否携带了令牌;
[0048] 第一验证单元,用于当URL参数携带了令牌时验证该令牌的有效性,如果有效则转发该HTTP请求;如果无效则丢弃该HTTP请求并报警;
[0049] 令牌生成单元,用于当URL参数未携带令牌时随机生成一个唯一的令牌;
[0050] 重定向单元,用于将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;
[0051] 所述Web表单数据提交处理模块包括:
[0052] 第二判断单元,用于当所述HTTP请求的URL为Web表单数据提交URL时,判断所述HTTP请求的Referer值是否存在;如果Referer不存在则丢弃该HTTP请求;
[0053] 令牌提取单元,用于当Referer存在时从Referer中提取令牌,如果提取不出令牌则丢弃该HTTP请求;
[0054] 第二验证单元,用于当从Referer中提取出令牌时验证该令牌的有效性,如果有效则转发该HTTP请求;如果无效则报警。
[0055] 优选地,所述令牌生成单元随机生成一个令牌后还用于保存该令牌的名字和值对;
[0056] 所述第一/第二验证单元验证令牌的有效性是指:
[0057] 所述第一/第二验证单元在所保存的令牌中,找到与所要验证的令牌的名字相同的令牌;判断所找到的令牌的值与要验证的令牌的值是否相等;相等则该令牌有效,不相等则该令牌无效。
[0058] 优选地,所述重定向单元将HTTP请求的URL和令牌拼接成新的URL是指:
[0059] 所述重定向单元当所述HTTP请求的URL包括参数时,在该URL的参数串后追加一个或多个“&”字符后再附加上所述令牌的名字和值对,得到新的URL;当所述HTTP请求的URL没有包括参数时,在该URL后追加一个或多个“?”字符后,再附加上所述令牌的名字和值对,得到新的URL;
[0060] 所述第一验证单元转发HTTP请求是指:
[0061] 所述第一验证单元当所述HTTP请求的URL参数中除了令牌名字和值对还存在其它URL参数时,从该URL参数中删除“&”字符以及其后的令牌的名字和值对;当所述HTTP请求的URL参数中只包含令牌名字和值对时,从该URL参数中删除“?”字符以及其后的令牌的名字和值对;删除后转发所述HTTP请求。
[0062] 本发明的技术方案中,Web安全网关仅需对Web表单请求URL追加CSRF令牌和进行重定向,并不需要对返回的Web页面进行修改来插入CSRF令牌,因此,这将极大地减轻Web安全网关的计算开销;由于无需对返回的Web页面进行修改,因此,支持对由客户端脚本生成的Web表单进行CSRF防御;且CSRF防御由Web安全网关独立完成,无需Web服务器的参与,因此易于部署。与传统的CSRF防御方案相比,既可以减轻Web安全网关的计算压力,同时也可实现为Web应用系统中的所有Web表单提供全面的CSRF攻击保护。

附图说明

[0063] 图1为跨站请求伪造攻击原理图;
[0064] 图2为实施例一中的Web安全网关的位置示意图;
[0065] 图3为实施例一的一个例子的流程示意图;
[0066] 图4为实施例二的转发HTTP请求的装置的示意框图。

具体实施方式

[0067] 下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
[0068] 需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0069] 为方便起见,本文称包含Web表单的Web页面所对应的URL为Web表单请求URL,称用来处理Web表单数据的动态Web页面所对应的URL为Web表单数据提交URL,Web表单数据提交URL通常由FORM标签的ACTION属性指定,也不排除由其它方式指定。
[0070] 实施例一,一种转发HTTP请求的方法,可应用在Web安全网关上,包括:
[0071] 判断Web客户端的HTTP请求的URL是否为Web表单请求URL或Web表单数据提交URL;
[0072] 当所述HTTP请求的URL为Web表单请求URL时,如果该HTTP请求的URL参数中携带了有效的令牌,则转发该HTTP请求;如果未携带令牌则随机生成一个唯一的令牌,将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;
[0073] 当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求存在Referer值,并且从Referer中可以提取出有效的令牌,则转发该HTTP请求。
[0074] 本实施例中,所述方法还可以包括:
[0075] 当Web客户端的HTTP请求的URL为Web表单请求URL时,如果URL参数携带了无效的令牌则丢弃该HTTP请求并报警。
[0076] 本实施例中,所述方法还可以包括:
[0077] 当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求不存在Referer,则丢弃该HTTP请求;
[0078] 如果该HTTP请求存在Referer,但从Referer中提取不出令牌则丢弃该HTTP请求;
[0079] 如果从Referer中提取出无效的令牌则丢弃该HTTP请求并报警。
[0080] 本实施例中,如果客户端的HTTP请求的URL既不是Web表单请求URL,也不是Web表单数据提交URL,则可以直接转发。
[0081] 本实施例中,随机生成的令牌是不可预测的,“唯一”是指该令牌的名在该安全网关是唯一的;采用重定向方法将该随机的令牌附加到了Web表单请求URL上,Web用户填写完Web表单,并通过Web表单数据提交URL提交所输入的Web表单数据时,附加在Web表单请求URL上的令牌将随所述HTTP请求的Referer变量返回给Web安全网关,Web安全网关通过验证Referer中携带的令牌的有效性来验证该HTTP请求的合法性。
[0082] 本实施例中,所述随机生成一个唯一的令牌的步骤中还可以包括:保存该令牌的名字和值对;
[0083] 本实施例中,所述令牌有效/无效具体可以是指:
[0084] 所保存的令牌中,与所述令牌名字相同的令牌的值对,与所述令牌的值对相同/不相同。
[0085] 本实施例中,所述将HTTP请求的URL和令牌拼接成新的URL的步骤具体可以包括:
[0086] 当所述HTTP请求的URL包括参数时,在该URL的参数串后追加一个或多个“&”字符后再附加上所述令牌的名字和值对,得到新的URL;
[0087] 当所述HTTP请求的URL没有包括参数时,在该URL后追加一个或多个“?”字符后,再附加上所述令牌的名字和值对,得到新的URL。
[0088] 本实施例中,所述向Web客户端发送一个重定向请求到所述新URL的HTTP响应消息的步骤具体可以包括:
[0089] 向Web客户端发送一个状态码为302的表示目标文件临时移除的状态响应码,并将新的URL值放置在HTTP响应消息的Location参数变量中。
[0090] 本实施例中,当Web客户端的HTTP请求的URL为Web表单请求URL时,所述转发HTTP请求的步骤具体可以包括:
[0091] 当所述HTTP请求的URL参数中除了令牌名字和值对还存在其它URL参数时,从该URL参数中删除“&”字符以及其后的令牌的名字和值对;
[0092] 当所述HTTP请求的URL参数中只包含令牌名字和值对时,从该URL参数中删除“?”字符以及其后的令牌的名字和值对;
[0093] 删除后转发所述HTTP请求。
[0094] 实际应用时也可以不删除。
[0095] 如图2所示,本实施例的Web安全网关位于Web客户端和受保护的Web应用系统之间。所述Web客户端可运行标准Web浏览器程序(包括微软IE浏览器、谷歌Chrome浏览器或者Mozilla、FireFox浏览器等),它通过HTTP协议与受保护的Web应用系统进行通信。Web客户端与受保护的Web应用系统之间的通信都通过Web安全网关进行转发。Web安全网关转发来自Web客户端的HTTP请求,并可以直接对HTTP请求进行重定向;此外,Web安全网关转发来自受保护Web应用系统的HTTP响应消息,并可以在转发HTTP响应消息时对返回给Web客户端的Web页面进行修改。目前,所有标准Web浏览器都支持对HTTP重定向请求的处理。
[0096] 图3为本实施例的一个具体例子,包括以下几个步骤:
[0097] 301、Web安全网关接收来自Web客户端的HTTP请求消息:Web安全网关如果实现为反向Web代理,则直接在应用层获取转发给受保护Web应用系统的HTTP请求;如果Web安全网关实现为网络层端口转发机制,则需要执行流重组和HTTP协议解析,从而获得转发给受保护Web应用系统的HTTP请求消息。
[0098] 302,Web安全网关根据HTTP请求的URL类别不同进行相应处理:如果所述HTTP请求的URL为Web表单请求URL,则执行步骤303;如果所述HTTP请求的URL为Web表单数据提交URL,则执行步骤304;如果所述HTTP请求的URL不属于上述两类则直接转发该HTTP请求后结束;
[0099] 303、检查当前HTTP请求的URL参数中是否携带由Web安全网关先前生成的令牌:如果携带令牌并且验证有效,则将URL参数中的令牌删除后转发该HTTP请求后结束;如果没携带令牌则由Web安全网关生成一个随机且不可预测的令牌,然后将当前HTTP请求的URL和所生成的令牌进行拼接成新的URL,最后丢弃该HTTP请求并向Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息后结束;如果令牌验证无效还可以丢弃该HTTP请求并报警,结束;
[0100] 304、检查当前HTTP请求的Referer值:如果Referer存在且从Referer中提取出的令牌经验证有效,则转发该HTTP请求后结束;如果Referer不存在,或Referer中提取不出令牌则丢弃该HTTP请求并结束;如果令牌验证无效,则报警并结束。
[0101] 下面再用两个具体的例子进行说明。
[0102] 例子二,假设受保护的Web应用系统为一个网银系统,其域名为www.bank.com,它允许用户在登录成功后在线进行资金转账操作。假设用户登录成功后,网银系统为用户分配一个唯一的、不可猜测的会话ID凭证,该会话ID凭证基于Cookie技术保存在Web客户端;用户登录成功后,网银系统在进行敏感操作时,需要验证Web客户端发送来的cookie中的会话ID凭证的有效性来验证用户是否登录成功。
[0103] 假设该网银系统的资金转账页面所对应的URL为TransferForm.html,Transferform.html中用来填写资金转账信息的Web表单所对应的HTML代码如下所示:
[0104]
[0105]
[0106]
[0107]
[0108]
[0109] 这里,资金转账页面所对应的URL为TransferForm.html,就是本文所述的Web表单请求URL。从上述HTML代码可以看出,该网银系统中用来处理资金转账操作的动态Web页面所对应的URL为ExecTransfer.cgi,就是本文所述的Web表单数据提交URL。由上面所述的HTML代码可以看出,该网银系统的资金转账Web表单存在CSRF漏洞,攻击者很容易采用CSRF攻击对该网银系统进行攻击。
[0110] 而采用了本实施例的方法后,将进行如下操作,以防御CSRF攻击。
[0111] 假设网银客户A成功登录了该网银系统,所述网银系统为客户A生成了唯一的会话ID凭证,并通过在HTTP响应消息头部插入如下所示的Set-Cookie命令将会话ID凭证推送到Web客户端:
[0112] Set-Cookie:SessionID:xxxx-yyyy-zzzz-mmmm。
[0113] 网银客户A打算进行资金转账操作,于是点击网银系统上的资金转账超级链接。此时,Web客户端将生成如下所示的请求资金转账表单的HTTP请求(后文简称为第一HTTP请求):
[0114] GET/TransferForm.html HTTP/1.1
[0115] HOST:www.bank.com
[0116] ACCEPT:text/html,*/*
[0117] Cookie:SessionID:xxxx-yyyy-zzzz-mmmm
[0118] Referer:http://www.bank.com/
[0119] 上述第一HTTP请求将被Web安全网关截获。Web安全网关依据预先设置的Web表单请求URL列表将该HTTP请求分类为Web表单请求URL。于是,Web安全网关试图从该第一HTTP请求的URL中提取CSRF令牌。由于该第一HTTP请求的URL并不包含令牌,因此,Web安全网关将不得不为其生成一个新的、唯一的、不可预知的令牌,这里假设Web安全网关为该第一HTTP请求生成的令牌为AAAA-BBBB-CCCC-DDDD。然后,Web安全网关基于该第一HTTP请求的URL和新生成的令牌拼接成一个如下所示的新的URL(后文简称为第一URL)。
[0120] /TransferForm.html?CSRFToken=AAAA-BBBB-CCCC-DDDD
[0121] 新生成的CSRF令牌被放置在HTTP请求的URL的后面,并以问号隔开,CSRFToken为令牌的名字,令牌的值为:
[0122] AAAA-BBBB-CCCC-DDDD。
[0123] 注意,如果HTTP请求的URL后面已经带有URL参数,则只需要在URL参数串后面追加一个参数即可。比如,如果原先的HTTP请求的URL为/transferform.cgi?userid=123,则拼接出的新的URL如下所示。
[0124] /transferform.cgi?userid=123&CSRFToken=AAAA-BBBB-CCCC-DDDD[0125] 最后,Web安全网关丢弃第一HTTP请求,然后,生成一个重定向到第一URL的HTTP响应消息。所生成的HTTP响应消息如下所示:
[0126] HTTP/1.1302Object Moved
[0127] Server:Apache-xxxx
[0128] Location:/TransferForm.html?CSRFToken=AAAA-BBBB-CCCC-DDDD[0129] Content-Length:0
[0130] 网银客户A的Web客户端接收到上述HTTP响应消息后,将重新提交一个如下所示的新的HTTP请求(后文称为第二HTTP请求),该第二HTTP请求的URL为上述Location中指定的URL。
[0131] GET /TransferForm.html?CSRFToken=AAAA-BBBB-CCCC-DDDD HTTP/1.1[0132] HOST:www.bank.com
[0133] ACCEPT:text/html,*/*
[0134] Cookie:SessionID:xxxx-yyyy-zzzz-mmmm
[0135] Referer:http://www.bank.com/
[0136] 第二HTTP请求将再次被Web安全网关截获。Web安全网关依据预先设置的Web表单请求URL列表将该HTTP请求分类为Web表单请求URL。于是,Web安全网关试图从该第二HTTP请求的URL中提取令牌。这次正确提取出的令牌值为AAAA-BBBB-CCCC-DDDD。Web安全网关将该令牌值与本地存储的CSRF令牌值比对后发现一致,于是将该第二HTTP请求转发给受保护Web应用系统。
[0137] 受保护的Web应用系统接收到第二HTTP请求后,将验证该用户的身份以及鉴别其权限,验证通过后,将向Web客户端返回一个HTTP响应消息,该HTTP响应消息中包含所述资金转账Web表单。包含所述资金转账Web表单的HTTP响应消息将被Web安全网关不加修改的转发给Web客户端,这一点完全不同于实现于Web安全网关上的传统CSRF防御方法。
[0138] Web客户端呈现在接收到包含所述资金转账Web表单的HTTP响应消息后将为网银客户A呈现给资金转账表单。网银客户A填写完该表单并点击提交按钮后,Web客户端将生成如下所示的HTTP请求消息(后文称为第三HTTP请求),所述第三HTTP请求消息的URL为该资金转账Web表单所对应的Web表单数据提交URL,即/ExecTransfer.cgi。
[0139] GET/ExecTransfer.cgi HTTP/1.1
[0140] HOST:www.bank.com
[0141] ACCEPT:text/html,*/*
[0142] Cookie:SessionID:xxxx-yyyy-zzzz-mmmm
[0143] Referer:
[0144] http://www.bank.com//TransferForm.html?CSRFToken=AAAA-BBBB-CCCC-D DDD
[0145] Content-Length:30
[0146] Amount=10000&recipient=xiaoye
[0147] 由HTML规范可知,资金转账Web表单页面所对应的URL:
[0148] http://www.bank.com//TransferForm.html ? CSRFToken = AAAA-BBBB-CC CC-DDDD,
[0149] 与资金转账Web表单数据提交URL:
[0150] http://www.bank.com/ExecTransfer.cgi为直接链接跳转关系,因此,标准Web客户端将自动将第三HTTP请求的Referer值设置为第二HTTP请求所对应的完整URL。
[0151] 最后,第三HTTP请求将被Web安全网关截获。Web安全网关依据预先设置的Web表单数据提交URL列表将该第三HTTP请求分类为Web表单数据提交URL。于是,Web安全网关试图从该第三HTTP请求的Referer中提取令牌。这里正确提取出的令牌值为AAAA-BBBB-CCCC-DDDD。Web安全网关将该令牌值与本地存储的令牌值比对后发现一致,于是将该第三HTTP请求转发给受保护Web应用系统。最后,受保护Web应用系统将正确处理该资金转账请求操作。
[0152] 例子三,与例子二非常类似,唯一不同的是,当Web安全网关接收到第二HTTP请求消息后,并验证了该第二HTTP请求的URL中的令牌有效后,在转发该第二HTTP请求前,将第二HTTP请求中的URL中的令牌名称和值对删除,从而使得受保护的Web应用系统接收到的HTTP请求消息与未实施CSRF保护前看到的HTTP请求的数据一样(第一HTTP请求)。将HTTP请求中的URL中的令牌名称和值对删除的好处是:这可以使得Web安全网关上实施的CSRF防御机制对受保护的Web应用系统完全透明。
[0153] 实施例二,一种转发HTTP请求的装置,可应用在Web安全网关上,如图4所示,包括:
[0154] HTTP请求分类模块,用于判断Web客户端的HTTP请求的URL是否为Web表单请求URL或Web表单数据提交URL;
[0155] Web表单请求处理模块,用于当所述HTTP请求的URL为Web表单请求URL时,如果该HTTP请求的URL参数中携带了有效的令牌,则转发该HTTP请求;如果未携带令牌则随机生成一个唯一的令牌,将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息;
[0156] Web表单数据提交处理模块,用于当所述HTTP请求的URL为Web表单数据提交URL时,如果该HTTP请求存在Referer值,并且从Referer中可以提取出有效的令牌,则转发该HTTP请求。
[0157] 本实施例中,所述Web表单请求处理模块具体可以包括:
[0158] 第一判断单元,用于当所述HTTP请求的URL为Web表单请求URL时,判断该HTTP请求的URL参数中是否携带了令牌;
[0159] 第一验证单元,用于当URL参数携带了令牌时验证该令牌的有效性,如果有效则转发该HTTP请求;如果无效则报警;
[0160] 令牌生成单元,用于当URL参数未携带令牌时随机生成一个唯一的令牌;
[0161] 重定向单元,用于将所述HTTP请求的URL和生成的令牌拼接成新的URL,丢弃所述HTTP请求并向所述Web客户端发送一个请求重定向到所述新的URL的HTTP响应消息。
[0162] 本实施例中,所述Web表单数据提交处理模块具体可以包括:
[0163] 第二判断单元,用于当所述HTTP请求的URL为Web表单数据提交URL时,判断所述HTTP请求的Referer值是否存在;如果Referer不存在则丢弃该HTTP请求;
[0164] 令牌提取单元,用于当Referer存在时从Referer中提取令牌,如果提取不出令牌则丢弃该HTTP请求;
[0165] 第二验证单元,用于当从Referer中提取出令牌时验证该令牌的有效性,如果有效则转发该HTTP请求;如果无效则报警。
[0166] 本实施例中,所述HTTP请求分类单元当客户端的HTTP请求的URL既不是Web表单请求URL,也不是Web表单数据提交URL时可以直接转发。
[0167] 本实施例中,所述令牌生成单元随机生成一个令牌后还可以用于保存该令牌的名字和值对。
[0168] 本实施例中,所述第一/第二验证单元验证令牌的有效性具体可以是指:
[0169] 所述第一/第二验证单元在所保存的令牌中,找到与所要验证的令牌的名字相同的令牌;判断所找到的令牌的值对与要验证的令牌的值对是否相同;相同则该令牌有效,不相同则该令牌无效。
[0170] 本实施例中,所述重定向单元将HTTP请求的URL和令牌拼接成新的URL具体可以是指:
[0171] 所述重定向单元当所述HTTP请求的URL包括参数时,在该URL的参数串后追加一个或多个“&”字符后再附加上所述令牌的名字和值对,得到新的URL;当所述HTTP请求的URL没有包括参数时,在该URL后追加一个或多个“?”字符后,再附加上所述令牌的名字和值对,得到新的URL。
[0172] 本实施例中,所述重定向单元向Web客户端发送一个重定向请求到所述新URL的HTTP响应消息具体可以是指:
[0173] 所述重定向单元向Web客户端发送一个状态码为302的表示目标文件临时移除的状态响应码,并将新的URL值放置在HTTP响应消息的Location参数变量中。
[0174] 本实施例中,所述第一验证单元转发HTTP请求具体可以是指:
[0175] 所述第一验证单元当所述HTTP请求的URL参数中除了令牌名字和值对还存在其它URL参数时,从该URL参数中删除“&”字符以及其后的令牌的名字和值对;当所述HTTP请求的URL参数中只包含令牌名字和值对时,从该URL参数中删除“?”字符以及其后的令牌的名字和值对;删除后转发所述HTTP请求。
[0176] 其它实现细节可以同实施例一。
[0177] 本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
[0178] 当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。