一种漏洞检测的方法及装置
技术领域
本发明属于信息安全技术领域,尤其涉及一种漏洞检测的方法及装置。
背景技术
JSON(JavaScript Object Notation,JSON)是一种轻量级的数据交换格式,JSON劫持(JSON Hijacking)是利用JSON格式数据来进行攻击,当服务器存在JSON劫持漏洞时,黑客可以利用该漏洞,在合法用户不知情的情况下获取到该用户的敏感信息,例如,邮件内容、银行账户,甚至是支付密码,等等,给用户的信息安全造成了巨大的危害。
对于JSON劫持的漏洞检测,目前仅能够简单地实现对页面与服务器交互过程中产生的JSON数据的抓取,在数据抓取完成之后,还需要人工地通过抓取到的数据来确认页面与服务器的交互接口是否存在JSON劫持漏洞。上述方法的检测效率低下,完全无法满足互联网中海量交互接口的漏洞检测需求。
发明内容
本发明实施例的目的在于提供一种漏洞检测的方法,旨在解决现有技术中只能通过人工的方式对JSON劫持漏洞进行检测,导致检测效率低的问题。
本发明实施例是这样实现的,一种漏洞检测的方法,包括:
通过携带用户身份标识的第一访问方式访问服务器提供的统一资源定位符URL,获取所述服务器返回的第一数据内容;
通过不携带所述用户身份标识的第二访问方式访问所述URL,获取所述服务器返回的第二数据内容;
判断访问结果是否符合预设的漏洞检测条件,所述预设的漏洞检测条件包括所述第一数据内容和所述第二数据内容不相同;
当所述访问结果符合预设的漏洞检测条件时,判定所述URL存在漏洞。
本发明实施例的另一目的在于提供一种漏洞检测的装置,包括:
第一访问单元,用于通过携带用户身份标识的第一访问方式访问服务器提供的统一资源定位符URL,获取所述服务器返回的第一数据内容;
第二访问单元,用于通过不携带所述用户身份标识的第二访问方式访问所述URL,获取所述服务器返回的第二数据内容;
判断单元,用于判断访问结果是否符合预设的漏洞检测条件,所述预设的漏洞检测条件包括所述第一数据内容和所述第二数据内容不相同;
判定单元,用于当所述访问结果符合预设的漏洞检测条件时,判定所述URL存在漏洞。
在本发明实施例中,通过自动向服务器提供的URL发起不同方式的访问,根据服务器针对每一种访问方式所返回的数据内容进行对比判断,以检测出该URL是否存在JSON劫持漏洞,由此提高了漏洞检测的效率。
附图说明
图1是本发明实施例提供的漏洞检测的方法的实现流程图;
图2是本发明另一实施例提供的漏洞检测的方法的实现流程图;
图3是本发明另一实施例提供的漏洞检测的方法的实现流程图;
图4是本发明实施例提供的漏洞检测的装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,通过自动向服务器提供的统一资源定位符(UniformResource Locator,URL)发起不同方式的访问,根据服务器针对每一种访问方式所返回的数据内容进行对比判断,以检测出该URL是否存在JSON劫持漏洞,由此提高了漏洞检测的效率。
首先,关于所述JSON劫持漏洞:
当在客户端通过超文本标记语言(Hypertext Markup Language,HTML)页面访问服务器提供的某个URL时,便开始了客户端与服务器的交互过程。例如,服务器可以在该URL上定义通用网关接口(Common Gateway Interface,CGI),当服务器接收到客户端对该URL的请求时,与该CGI相关的程序就会被调用,将客户端发送的数据作为该程序的输入,而该程序的输出则会由服务器返回给客户端,这部分返回的数据内容中可能包括了与该用户相关的信息,在该情况下,称这个URL存在JSON劫持漏洞,正是基于该JSON劫持漏洞,黑客能够引诱用户通过客户端点击该URL,从而截取到服务器返回的该用户相关的信息,导致用户信息遭到泄露。
例如,某互联网公司的邮箱业务存在JSON劫持漏洞,通过访问邮箱业务的服务器,能够获取到用户的邮件列表,从而进一步获取到用户邮件中的私密信息。基于该JSON劫持漏洞,黑客可以在其站点中嵌入以下代码:
其中:
“http://mail.qq.com/cgi-bin/login?fun=passport&target=MLIST&t=login.js&pagesize=10&resp_charset=gb2312&1=3”即为用于获取到用户邮件列表的URL,黑客通过向用户发送其站点的链接,当用户点击其站点的链接之后,该段代码被自动执行,用户便会在不知情的情况下,以用户身份访问该邮箱业务的服务器,使得黑客截取到服务器返回的邮件列表,从而造成用户私密信息的泄露。
针对上述JSON劫持漏洞可能带来的信息安全隐患,在本发明实施例中,提供了对于此类漏洞的检测方法,以下进行详细阐述:
图1示出了本发明实施例提供的漏洞检测的方法的实现流程,详述如下:
在S101中,通过携带用户身份标识的第一访问方式访问服务器提供的URL,获取所述服务器返回的第一数据内容。
在S102中,通过不携带所述用户身份标识的第二访问方式访问所述URL,获取所述服务器返回的第二数据内容。
在S101和S102中,首先通过两种不同的访问方式来对服务器提供的同一URL进行访问,上述两种不同的访问方式之间的区别是,一种携带了用户身份标识,另一种则不携带该用户身份标识,而其中不携带该用户身份标识的访问方式,可以为在发起URL请求的过程中不携带任何用户身份标识,或者,可以为在发起URL请求的过程中携带与另一种访问方式不同的用户身份标识。
在本实施例中,所述用户身份标识,可以为服务器储存在客户端本地的cookie数据,或者,可以为用户通过客户端登录服务器所使用的账号密码。
在S103中,判断访问结果是否符合预设的漏洞检测条件,所述预设的漏洞检测条件包括所述第一数据内容和所述第二数据内容不相同。
在S104中,当所述访问结果符合预设的漏洞检测条件时,判定所述URL存在漏洞。
通过获取到的服务器针对不同访问方式所分别返回的访问结果,进行进一步的判断,以判断获取到的访问结果是否符合预设的漏洞检测条件,若获取到的访问结果符合预设的漏洞检测条件,则判定该URL存在JSON劫持漏洞,否则,则认为该URL不存在用户信息安全隐患。
在本实施例中,获取到的访问结果如下:通过S101的访问方式,得到服务器返回的第一数据内容,通过S102的访问方式,得到服务器返回的第二数据内容,而预设的漏洞检测条件包括:服务器返回的第一数据内容和第二数据不相同,即,当通过数据对比的方式判断出S101获取到的第一数据内容和S102中获取到的第二数据内容不相同时,则判定该URL存在JSON劫持漏洞。上述预设的漏洞检测条件的设置是出于用户信息用户私有性的考虑,其原因在于,通常服务器需要验证用户身份之后才能够返回用户个人的私密数据,因此,对于同一URL来说,若携带用户身份标识与不携带用户身份标识所返回的数据内容不相同,则表明返回的数据内容与用户个人信息相关,则该URL存在着JSON数据泄露的隐患。
进一步地,若判断出第一数据内容与第二数据内容不相同,虽然能够表明服务器返回的数据内容是与用户个人信息相关的数据内容,但是,此类数据内容即使遭到了泄露,可能并不会为用户造成信息安全方面的危害(例如,服务器返回的是用户已公开的微博内容,等等),因此,作为本发明的一个实施例,为了提高漏洞检测的精度,如图2所示,在S101之后,S103之前,所述方法还包括:
S105,将所述第一数据内容与预置的敏感信息进行字符串匹配,则,所述预设的漏洞检测条件还包括:
所述第一数据内容中包含与预置的敏感信息匹配的内容。
在本实施例中,在第一数据内容与第二数据内容相等的同时,可以将第一数据内容与预置的敏感信息进行字符串匹配,判断第一数据内容中是否包含与预置的敏感信息相匹配的内容,若第一数据内容中包含了与预置的敏感信息相匹配的内容,则表明服务器返回的数据内容是与用户个人信息高度相关的、若泄露必然带来一定安全威胁的数据内容,则判定该URL存在漏洞;若第一数据内容中并不包含与预置的敏感信息相匹配的内容,则表明此类数据即使泄露,也并不会对用户的信息安全带来影响,则该URL不被视为存在漏洞。
在本实施例中,预置的敏感信息可以以正则表达式的形式存储在数据库中,通过定义涉及到安全敏感内容的关键字,使得在匹配过程完成之后,能够确定出第一数据内容一旦泄露,是否会对用户的信息安全带来影响。其中,涉及到安全敏感内容的关键字包括但不限于“密码”、“出生年月”、“联系电话”等,具体的字符串匹配算法在此不用于限定本发明。
通常,客户端在发起URL请求时,还会在URL请求中携带该URL的超文本传输协议(Hypertext transfer protocol,HTTP)来源地址(referer,或者HTTP referer)。所述HTTP来源地址,是HTTP表头的一个字段,用于表示从哪儿链接到当前访问的URL,换句话说,借着HTTP来源地址,服务器可以获知发起URL请求的客户端是从哪里获取到该URL的。基于URL请求中携带的HTTP来源地址,服务器自身可以进行JSON劫持漏洞的防御部署,在响应该URL之前进行HTTP来源地址验证,对于并非由服务器本身提供的HTTP来源地址,服务器可以选择不返回与用户个人信息相关的数据内容,因此,在本实施例中,为了保证不同的访问方式不受服务器自身防御部署的影响,导致无法对服务器返回的数据进行准确判断,在第一访问方式和第二访问方式中,均携带相同的HTTP来源地址。
作为本发明的一个实施例,上述第一访问方式和第二访问方式所携带的HTTP来源地址可以为预先构造的第一HTTP来源地址,作为本明的另一实施例,上述第一访问方式和第二访问方式所携带的HTTP来源地址也可以为该URL所属的服务器提供的第二HTTP来源地址。
进一步地,对于服务器自身已做了防御部署的URL来说,可以不将其视为漏洞,从而降低漏洞检测的误报率,因此,作为本发明的一个实施例,当第一访问方式和第二访问方式所携带的为服务器提供的HTTP来源地址时,如图3所示,在S101之后,S103之前,所述方法还包括:
S106,通过携带所述用户身份标识且不携带所述URL的所述第二HTTP来源地址的第三访问方式访问所述URL,获取所述服务器返回的所述第三数据内容,则,所述预设的漏洞检测条件还包括:
所述第一数据内容和所述第三数据内容相同。
其中,不携带所述URL的所述第二HTTP来源地址,可以分为两种情况:其一是在URL请求中不携带任何HTTP来源地址,其二是在URL请求中携带服务器提供的HTTP来源地址之外的、预先构造的HTTP来源地址。若服务器对该URL已进行了上述防御部署,则无论是以上任一情况,服务器所返回的数据都将与所述第一数据内容不同,若服务器返回的数据内容与所述第一数据内容相同,则判定该服务器未对该URL进行防御部署,此时,则判断该URL存在漏洞。
基于本发明以上实施例所提供的漏洞检测的方法,能够利用C++和Perl编写出相应的JSON劫持漏洞检测工具,以自动检测服务器提供的URL,发现其中的JSON劫持漏洞,对于大型互联网内容提供商海量的交互接口来说,通过上述方法能够达到很好的漏洞检测效率,同时也有效降低了漏洞检测的误报率,便于这些互联网内容提供商高效地进行JSON劫持的漏洞修复。
图4示出了本发明实施例提供的漏洞检测的装置的结构框图,该装置用于运行本发明图1至图3实施例所述的漏洞检测的方法。为了便于说明,仅示出了与本实施例相关的部分。
参照图4,该装置包括:
第一访问单元41,通过携带用户身份标识的第一访问方式访问服务器提供的统一资源定位符URL,获取所述服务器返回的第一数据内容。
第二访问单元42,通过不携带所述用户身份标识的第二访问方式访问所述URL,获取所述服务器返回的第二数据内容。
判断单元43,判断访问结果是否符合预设的漏洞检测条件,所述预设的漏洞检测条件包括所述第一数据内容和所述第二数据内容不相同。
判定单元44,当所述访问结果符合预设的漏洞检测条件时,判定所述URL存在漏洞。
可选地,所述装置还包括:
匹配单元,将所述第一数据内容与预置的敏感信息进行字符串匹配;
则所述预设的漏洞检测条件还包括:
所述第一数据内容中包含与预置的敏感信息匹配的内容。
可选地,所述第一访问方式和所述第二访问方式均携带所述URL的第一HTTP来源地址,所述第一HTTP来源地址为预先构造的HTTP来源地址。
可选地,所述第一访问方式和所述第二访问方式均携带所述URL的第二HTTP来源地址,所述第二HTTP来源地址为所述服务器提供的HTTP来源地址。
可选地,所述装置还包括:
第三访问单元,通过携带所述用户身份标识且不携带所述URL的所述第二HTTP来源地址的第三访问方式访问所述URL,获取所述服务器返回的所述第三数据内容;
则所述预设的漏洞检测条件还包括:
所述第一数据内容和所述第三数据内容相同。
在本发明实施例中,通过自动向服务器提供的URL发起不同方式的访问,根据服务器针对每一种访问方式所返回的数据内容进行对比判断,以检测出该URL是否存在JSON劫持漏洞,由此提高了漏洞检测的效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。