网络请求防护方法及网络通信系统与流程

文档序号:14880219发布日期:2018-07-07 09:34阅读:133来源:国知局

本申请涉及网络安全技术领域,具体而言,涉及一种网络请求防护方法及网络通信系统。



背景技术:

随着网络技术的不断发展及个人计算机终端的普及,依靠互联网实现各种信息交互的场景越来越丰富。在通过网页进行数据交互过程中,合法用户终端与服务器之间的通信可能遭到各种攻击,导致攻击者利用合法用户终端的身份对服务器进行操作。现有技术中,仅通过一些单一的手段对这类攻击进行防护,防护方式不全面,容易被攻击者绕开,不能有效进行防护。



技术实现要素:

为了克服现有技术中的上述不足,本申请的目的在于提供一种网络请求防护方法,应用于包括相互通信的服务器及用户终端的系统;所述方法包括:

所述服务器获取用户终端发送的第一http请求;

所述服务器替换所述第一http请求中的预设字符后得到第二http请求,检测所述第二http请求中是否包括预设的敏感关键字;

若检测到所述第二http请求中不包括所述敏感关键字,所述服务器获取并验证所述第一http请求中的referer值是否以预设域名开头,并验证所述第一http请求中的token值为预设值;

若检测到所述第一http请求中的referer值是以预设域名开头,且所述第一http请求中的token值为所述预设值,所述服务器响应该第一http请求。

可选地,在上述方法中,所述第一http请求包括登录请求;所述服务器预存有用户账号与第一基准散列值的对应关系,其中所述第一基准散列值根据所述用户账号与对应的用户密码预先生成;所述若检测到所述第一http请求中的referer值是以预设域名开头,且所述第一http请求中的token值为所述预设值,所述服务器响应该第一http请求的步骤,包括:

若检测到所述登录请求中的referer值以预设域名开头,且所述第一http请求中的token值为所述预设值,则所述服务器向所述用户终端发送一随机生成的盐值,其中,所述登录请求中包括用户账号;

所述用户终端根据用户输入的登录账号及登录密码生成第一验证散列值,并根据所述第一验证散列值与所述盐值生成第二验证散列值发送给所述服务器;

所述服务器根据所述用户账号查找对应的所述第一基准散列值,根据所述第一基准散列值及所述盐值生成第二基准散列值;

所述服务器检测所述第二验证散列值与所述第二基准散列值是否相同,若所述第二验证散列值与所述第二基准散列值相同则向所述用户终端发送登录成功通知。

可选地,在上述方法中,所述第一http请求包括用户信息上传请求;所述方法还包括:

所述用户终端接收用户输入的用户信息,采用预设密钥对所述用户信息进行异或加密得到密文后生成所述第一http请求并上传给服务器;

所述服务器在响应该第一http请求后,采用所述预设密钥对所述密文进行解密得到所述用户信息。

可选地,在上述方法中,所述服务器预设有多个struts2拦截器及记录所述多个struts2拦截器的列表;所述检测所述第二http请求中是否包括预设的敏感关键字的步骤,包括:

根据所述列表,依次调用所述多个struts2拦截器对所述第二http请求进行检测,以判断所述第二http请求是否包括预设的敏感关键字。

可选地,在上述方法中,所述方法还包括:

所述用户终端在待发送的http请求包括的url地址中加入token作为所述第一http请求发送给所述服务器。

可选地,在上述方法中,所述方法还包括:

所述用户终端在待发送的http请求的header字段部分预设的属性中添加token后作为所述第一http请求发送给所述服务器。

本申请的另一目的在于提供一种网络通信系统,包括相互通信的服务器及用户终端的系统;

所述服务器获取用户终端发送的第一http请求;

所述服务器替换所述第一http请求中的预设字符后得到第二http请求,检测所述第二http请求中是否包括预设的敏感关键字;

若检测到所述第二http请求中不包括所述敏感关键字,所述服务器获取并验证所述第一http请求中的referer值是否以预设域名开头,并验证所述第一http请求中的token值为预设值;

若检测到所述第一http请求中的referer值是以预设域名开头,且所述第一http请求中的token值为所述预设值,所述服务器响应该第一http请求。

可选地,在上述系统中,所述第一http请求包括登录请求;所述服务器预存有用户账号与第一基准散列值的对应关系,其中所述第一基准散列值根据所述用户账号与对应的用户密码预先生成;

所述服务器若检测到所述登录请求中的referer值以预设域名开头,且所述第一http请求中的token值为所述预设值,则所述服务器向所述用户终端发送一随机生成的盐值,其中,所述登录请求中包括用户账号;

所述用户终端根据用户输入的登录账号及登录密码生成第一验证散列值,并根据所述第一验证散列值与所述盐值生成第二验证散列值发送给所述服务器;

所述服务器根据所述用户账号查找对应的所述第一基准散列值,根据所述第一基准散列值及所述盐值生成第二基准散列值;

所述服务器检测所述第二验证散列值与所述第二基准散列值是否相同,若所述第二验证散列值与所述第二基准散列值相同则向所述用户终端发送登录成功通知。

可选地,在上述系统中,所述第一http请求包括用户信息上传请求;

所述用户终端接收用户输入的用户信息,采用预设密钥对所述用户信息进行异或加密得到密文后生成所述第一http请求并上传给服务器;

所述服务器在响应该第一http请求后,采用所述预设密钥对所述密文进行解密得到所述用户信息。

可选地,在上述系统中,所述服务器预设有多个struts2拦截器及记录所述多个struts2拦截器的列表;

所述服务器根据所述列表,依次调用所述多个struts2拦截器对所述第二http请求进行检测,以判断所述第二http请求是否包括预设的敏感关键字。

相对于现有技术而言,本申请具有以下有益效果:

本申请提供的网络请求防护方法及网络通信系统,通过对http请求中的敏感关键字进行屏蔽,并结合referer字段和token对请求进行验证,以识别并排除跨站脚本攻击攻击及跨站请求伪造,从而提高合法用户终端与服务器之间数据交互的安全性。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的网络通信系统的示意图;

图2为本申请实施例提供的网络请求防护方法的步骤流程示意图之一;

图3为本申请实施例提供的网络请求防护方法的步骤流程示意图之二;

图4为本申请实施例提供的网络请求防护方法的步骤流程示意图之三。

图标:10-网络通信系统;100-服务器;200-用户终端;300-网络。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

在本申请的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

在本申请的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。

请参照图1,本实施例提供一种网络通信系统10,包括相互通信的服务器100及至少一个用户终端200。在本实施例中,所述用户终端200可以通过网络300访问所述服务器100提供的web站点,所述用户终端200与所述服务器100之间可以通过http协议进行数据交互。

请参照图2,图2为应用于图1所示的网络通信系统10的一种网络请求防护方法的流程图,以下将对所述方法包括各个步骤进行详细阐述。

步骤s110,所述服务器100获取用户终端200发送的第一http请求。

在本实施例中,首先考虑对跨站脚本攻击(crosssitescripting,简称xss)攻击进行防护。xss是一种在web页面里插入恶意script代码的攻击方式,当用户浏览该web页面时,嵌入web页面里面的script代码会被执行,从而达到恶意攻击用户的目的。由于xss攻击过在http请求中,攻击者会通过一些手段隐藏script代码,故在本实施例中,通过步骤s120识别还原其中的关键字,然后进行检测屏蔽。

步骤s120,所述服务器100替换所述第一http请求中的预设字符后得到第二http请求,检测所述第二http请求中是否包括预设的敏感关键字。

在本实施例中,所述服务器100在接收到所述第一http请求后先替换该第一http请求汇总的预设字符,例如,可以通过正则表达式对所述第一http请求中的预设字符进行替换剔除。替换内容如下:

a.替换删除所述第一http请求中的“<”及“>”字符,将所述第一http请求中用户输入的内容放入单引号间,如此基本实现了用户输入数据与http请求自身代码的隔离。

b.替换删除所述第一http请求中的双引号字符,以防止用户跨越许可的标记,添加自定义标记。

c.替换删除所述第一http请求中的tab字符和空格字符,以防止关键字被拆分绕过检查。

d.替换所述第一http请求中的script关键字。

e.替换删除“&#”字符,以防止html属性绕过检查。

如此对所述第一http请求进行处理后得到第二http请求。

在本实施例中,可以采用struts2拦截器所述对第二http请求进行所述敏感关键字的识别。所述服务器100预设有多个struts2拦截器及记录所述多个struts2拦截器的列表。其中,所述多个struts2拦截器是面向切面编程(aspectorientedprogramming,简称aop)的一个实现,其使能状态时可配置的。

所述服务器100根据所述列表,依次调用所述多个struts2拦截器对所述第二http请求进行检测,以判断所述第二http请求是否包括预设的敏感关键字。

若检测到所述第二http请求中包括有所述敏感关键字,则不响应该第一http请求。

若检测到所述第二http请求中不包括所述敏感关键字,则进入步骤s130,对跨站请求伪造(cross-siterequestforgery,简称csrf)进行识别防护。

步骤s130,若检测到所述第二http请求中不包括所述敏感关键字,所述服务器100获取并验证所述第一http请求中的referer值是否以预设域名开头,并验证所述第一http请求中的token值为预设值。

在本实施例中,所述预设域名可以为所述服务器100提供的web站点的域名。

csrf是一种攻击者越权通过合法用户终端的身份对服务器100进行操作的攻击方式,例如,csrf攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作。比如说,受害者bob在银行有一笔存款,通过对银行的网站发送如下请求,可以使bob把1000000的存款转到bob2的账号下:

http://bank.example/withdraw?account=bob&amount=1000000&for=bob2

通常情况下,该请求发送到网站后,服务器100会先验证该请求是否来自一个合法的会话(session),并且该session的用户bob已经成功登陆。黑客mallory自己在该银行也有账户,他知道上文中的url可以把钱进行转帐操作。那么,mallory可以自己发送一个如下请求给银行:

http://bank.example/withdraw?account=bob&amount=1000000&for=mallory

但是这个请求来自mallory而非bob,他不能通过安全认证,因此该请求不会起作用。

这时,mallory可以通过csrf的攻击方式,他先制作一个网站,在网站中放入如下代码:

src=http://bank.example/withdraw?account=bob&amount=1000000&for=mallory

并且通过广告等诱使bob来访问他的网站。当bob访问该网站时,上述url就会从bob的浏览器发向银行,而这个请求会附带bob浏览器中的cookie一起发向银行服务器100。大多数情况下,该请求会失败,因为他要求bob的认证信息。但是,如果bob当时恰巧刚访问他的银行后不久,他的浏览器与银行网站之间的session尚未过期,浏览器的cookie之中含有bob的认证信息。这时,这个url请求就会得到响应,钱将从bob的账号转移到mallory的账号,而bob当时毫不知情。等以后bob发现账户钱少了,即使他去银行查询日志,他也只能发现确实有一个来自于他本人的合法请求转移了资金,没有任何被攻击的痕迹。而mallory则可以拿到钱后逍遥法外。

故在本实施例中,采用验证http请求中referer字段,并在请求地址中添加token验证的方式来防护csrf。

具体地,根据http协议的规定,在http请求头中有一个referer字段,它记录了该http请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问:

http://bank.example/withdraw?account=bob&amount=1000000&for=mallory

用户必须先登陆bank.example,然后通过点击页面上的按钮来触发转账事件。这时,该转帐请求的referer值就会是转账按钮所在的页面的url,通常是以bank.example域名开头的地址。而如果黑客要对银行网站实施csrf攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的referer是指向黑客自己的网站。因此,要防御csrf攻击,银行网站只需要对于每一个转账请求验证其referer值,如果是以bank.example开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果referer是其他网站的话,则有可能是黑客的csrf攻击,拒绝该请求。

然而,referer的值是由浏览器提供的,虽然http协议上有明确的要求,但是每个浏览器对于referer的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证referer值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如ie6或ff2,目前已经有一些方法可以篡改referer值。如果bank.example网站支持ie6浏览器,黑客完全可以把用户浏览器的referer值设为以bank.example域名开头的地址,这样就可以通过验证,从而进行csrf攻击。

故在本实施例中,可以在http请求中加入一个随机产生的token,并在服务器100端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是csrf攻击而拒绝该请求。

在本实施例的一种实施方式中,所述用户终端200在待发送的http请求包括的url地址中加入token作为所述第一http请求发送给所述服务器100。

在本实施方式中,token可以在用户登陆后产生并放于session之中,然后在每次请求时把token从session中拿出,与请求中的token进行比对。对于get请求,token将附在请求地址之后,这样url就变成http://url?csrftoken=tokenvalue。而对于post请求来说,要在form的最后加上<inputtype=”hidden”name=”csrftoken”value=”tokenvalue”/>,这样就把token以参数的形式加入请求了。

在本实施例的另一种实施方式中,所述用户终端200在待发送的http请求的header字段部分预设的属性中添加token后作为所述第一http请求发送给所述服务器100。

在本实施方式中,把token放到http头中自定义的属性里。通过xmlhttprequest这个类,可以一次性给所有该类请求加上csrftoken这个http头属性,并把token值放入其中。这样解决了上种方法在请求中加入token的不便,同时,通过xmlhttprequest请求的地址不会被记录到浏览器的地址栏,也不用担心token会透过referer泄露到其他网站中去。

基于上述设计,本实施例采用采用token验证与验证httpreferer字段结合使用能够更加有效的防御csrf攻击。

步骤s140,若检测到所述第一http请求中的referer值是以预设域名开头,且所述第一http请求中的token值为所述预设值,所述服务器100响应该第一http请求。

所述第一http请求可能包括不同的请求类型。

在本实施例的一种实施方式中,所述第一http请求可以包括登录请求。所述服务器100预存有用户账号与第一基准散列值的对应关系,所述第一基准散列值根据所述用户账号与对应的用户密码预先生成,例如,所述第一基准散列值可以由所述用户账号及对应的用户密码进行md5计算生成。

请参照图3,所述网络通信系统10可以通过步骤s210-步骤s240步骤对所述第一http请求进行处理。

步骤s210,所述服务器100向所述用户终端200发送一随机生成的盐值。

步骤s220,所述用户终端200根据用户输入的登录账号及登录密码生成第一验证散列值,并根据所述第一验证散列值与所述盐值生成第二验证散列值发送给所述服务器100。

在本实施方式中,所述用户终端200先对用户输入的登录账号及登录密码进行md5计算得到所述第一验证散列值,然后将所述第一验证散列值与所述盐值再次进行md5计算,得到第二验证散列值并发送给所述服务器100。

步骤s230,所述服务器100根据所述用户账号查找对应的所述第一基准散列值,根据所述第一基准散列值及所述盐值生成第二基准散列值。

所述服务器100所述登录请求中的用户账号查找相应的第一基准散列值,然后将所述第一基准散列值与所述盐值一起进行md5计算得到第二验证散列值。

步骤s240,所述服务器100检测所述第二验证散列值与所述第二基准散列值是否相同,若所述第二验证散列值与所述第二基准散列值相同则向所述用户终端200发送登录成功通知。

在本实施例中,针对一次登录所述盐值是唯一的,则通过步骤s220及步骤s230生成的散列值是也是唯一的,所以若所述第二验证散列值与所述第二基准散列值相同则可以认为用户输入的用户名及密码的对应关系正确,所述服务器100向所述用户终端200发送登录成功通知。

在本实施例的另一种实施方式中,所述第一http请求包括用户信息上传请求。

请参照图4,所述网络通信系统10可以通过步骤s310及步骤s320对所述用户信息上传请求进行处理。

步骤s310,所述用户终端200接收用户输入的用户信息,采用预设密钥对所述用户信息进行异或加密得到密文后生成所述第一http请求并上传给服务器100。

异或加密的原理是如果不知道两个参数的初值,就不可能进行逆向操作,例如,如果进行异或运算的两个变量值未知,就无法从结果推断两变量的值;如果a异或b返回真,也无从知晓是a真b假还是a假b真;进一步说,就算结果返回假,也仍然无法确定两个都真还是都假。

但是,如果知道了a或者b的初值,异或操作就是完全可逆的(不同于逻辑与、逻辑或)。例如,axortrue为真,则a假;axortrue为假,则a为真。异或加密的原则就是如果同时拥有加密的字符串和加密密钥,就可以正确解密;如果没有密钥的话,唯一的破解方法就是制作完全随机的密钥并挨个尝试,直到解密程序的输出是可读文本或其他类似的内容。加密密钥越长,就越难破解。

步骤s320,所述服务器100在响应该第一http请求后,采用所述预设密钥对所述密文进行解密得到所述用户信息。

所述服务器100在接收到所述用户终端200发送的第一http请求后,采用同样的预设密钥进行异或解密得到所述用户信息。如此,大大提高用户信息传递的安全性。

综上所述,本申请提供的网络请求防护方法及网络通信系统,通过对http请求中的敏感关键字进行屏蔽,并结合referer字段和token对请求进行验证,以识别并排除跨站脚本攻击攻击及跨站请求伪造,从而提高合法用户终端与服务器之间数据交互的安全性。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1