首页 / 专利库 / 电脑安全 / 跨站请求伪造 / 一种检测CSRF漏洞的方法和装置

一种检测CSRF漏洞的方法和装置

阅读:806发布:2020-05-15

专利汇可以提供一种检测CSRF漏洞的方法和装置专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种检测CSRF漏洞的方法和装置,其中方法包括:S1、获取待检测URL对应的登录页面的源代码;S2、从获取登录页面的源代码中提取 请求 表单;S3、对提取的请求表单分别检测是否存在CSRF漏洞。本发明从待检测URL对应的登录页面的源代码中提取请求表单进行CSRF漏洞检测,从而减少了对大量没有危害性的请求表单的分析,节约了时间,提高了检测效率。更进一步地,在对提取的请求表单进行检测时,首先基于标签和属性值进行分析将请求表单分为存在CSRF漏洞的请求表单、安全的请求表单和嫌疑表单,对嫌疑表单进一步基于构造伪造请求并对比返回结果的方式分析是否存在CSRF漏洞,双重保险的方式提高了检测 精度 。,下面是一种检测CSRF漏洞的方法和装置专利的具体信息内容。

1.一种检测跨站请求伪造(CSRF)漏洞的方法,其特征在于,该方法包括:
S1、将不带cookie请求待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同部分的源代码;
S2、从获取的所述不同部分的源代码中提取请求表单;
S3、对提取的请求表单分别检测是否存在CSRF漏洞。
2.根据权利要求1所述的方法,其特征在于,在所述S1之前还包括对待检测URL的页面源代码进行的噪声过滤:
对所述待检测URL进行n次请求,对n次请求得到的页面源代码取交集,在取交集得到的页面源代码基础上执行S1,所述n为2以上的整数。
3.根据权利要求1所述的方法,其特征在于,在所述获取不同部分的源代码过程中,记录带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的请求表单ID;
在所述S2中获取所述不同的请求表单ID对应的请求表单。
4.根据权利要求1所述的方法,其特征在于,所述S3中对各请求表单检测是否存在CSRF漏洞具体包括:
判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,所述待检测URL存在CSRF漏洞。
5.根据权利要求4所述的方法,其特征在于,如果请求表单不存在表示提交操作的标签,则确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则确定该请求表单为嫌疑表单。
6.根据权利要求5所述的方法,其特征在于,如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的请求表单中包含Token数据,则从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
7.根据权利要求1所述的方法,其特征在于,所述S3中对各请求表单检测是否存在CSRF漏洞具体包括:
从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
8.根据权利要求6或7所述的方法,其特征在于,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体包括:
遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
9.根据权利要求6所述的方法,其特征在于,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体包括:
遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。
10.根据权利要求6或7所述的方法,其特征在于,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞具体包括:
如果 则确定该请求表单不存在CSRF漏洞,否则确定该请求表单存在CSRF漏洞,其中所述M为嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求的返回页面源代码和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。
11.一种检测跨站请求伪造CSRF漏洞的装置,其特征在于,该装置包括:
代码获取单元,用于将不带cookie请求待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同部分的源代码;
表单提取单元,用于从所述代码获取单元获取的所述不同部分的源代码中提取请求表单;
漏洞检测单元,用于对所述表单提取单元提取的请求表单分别检测是否存在CSRF漏洞。
12.根据权利要求11所述的装置,其特征在于,该装置还包括:
噪声过滤单元,用于对所述待检测URL进行n次请求,对n次请求得到的页面源代码取交集,所述n为2以上的整数;
所述代码获取单元在所述噪声过滤单元取交集得到的页面源代码基础上,获取待检测URL对应的登录页面的源代码。
13.根据权利要求11所述的装置,其特征在于,所述代码获取单元在获取不同部分的源代码过程中,记录带cookie请求所述待检测URL获得的页面源代码中与不带cookie请求所述待检测URL获得的页面的源代码不同的请求表单ID;
所述表单提取单元获取所述不同的请求表单ID对应的请求表单。
14.根据权利要求11所述的装置,其特征在于,所述漏洞检测单元包括:
表单分类子单元,用于判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,所述待检测URL存在CSRF漏洞。
15.根据权利要求14所述的装置,其特征在于,如果请求表单不存在表示提交操作的标签,则所述表单分类子单元确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则所述表单分类子单元确定该请求表单为嫌疑表单。
16.根据权利要求15所述的装置,其特征在于,所述漏洞检测单元还包括:漏洞检测子单元;
所述表单分类子单元还用于如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的请求表单中包含Token数据,则将该请求表单提供给所述漏洞检测子单元;
所述漏洞检测子单元,用于从该请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
17.根据权利要求11所述的装置,其特征在于,所述漏洞检测单元具体包括:
请求伪造子单元,用于从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求;
相似度判断子单元,用于对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
18.根据权利要求16或17所述的装置,其特征在于,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:
遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
19.根据权利要求16所述的装置,其特征在于,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:
遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。
20.根据权利要求16或17所述的装置,其特征在于,如果 则确定该请求表单不存在CSRF漏洞,否则确定该请求表单存在CSRF漏洞,其中所述M为嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求的返回页面源代码和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。

说明书全文

一种检测CSRF漏洞的方法和装置

【技术领域】

[0001] 本发明涉及计算机安全技术领域,特别涉及一种检测跨站请求伪造(CSRF)漏洞的方法和装置。【背景技术】
[0002] 产品的安全涉及到用户的利益,若攻击者利用跨站请求伪造(CSRF,Cross-site request forgery)漏洞对合法用户进行攻击,便可以在合法用户无意识的情况下进行某些隐私操作,比如进行转账操作,这就会直接关系到用户的经济利益,因此,检测CSRF漏洞十分重要。
[0003] 现有检测CSRF漏洞的方式是对某一页面的所有请求表单(HTTP请求信息)都进行收集和识别以检测是否存在CSRF嫌疑,然后通过构造伪造请求并对比伪造请求的返回信息之间的相似度来确定是否是有CSRF攻击倾向的伪造请求。然而这种方式需要针对所有HTTP请求信息都进行收集分析,但有些请求表单是良性的,所谓良性的表单是指即使这个表单存在CSRF漏洞但也不影响到业务逻辑,那么此表单就没有危害性。由于对请求表单进行CSRF识别的复杂度较高,对大量没有危害性的请求表单进行分析显然浪费了时间,降低了检测效率。【发明内容】
[0004] 本发明提供了一种检测CSRF漏洞的方法和装置,以便于提高CSRF漏洞的检测效率。
[0005] 具体技术方案如下:
[0006] 一种检测跨站请求伪造(CSRF)漏洞的方法,该方法包括:
[0007] S1、获取待检测URL对应的登录页面的源代码;
[0008] S2、从获取的登录页面的源代码中提取请求表单;
[0009] S3、对提取的请求表单分别检测是否存在CSRF漏洞。
[0010] 根据本发明一优选实施例,所述步骤S1具体包括:
[0011] 将不带cookie请求所述待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的部分为所述待检测URL对应的登录页面的源代码。
[0012] 根据本发明一优选实施例,在所述步骤S1之前还包括对待检测URL的页面源代码进行的噪声过滤步骤:
[0013] 对所述待检测URL进行N次请求,对N次请求得到的页面源代码取交集,在取交集得到的页面源代码基础上执行步骤S1,所述N为2以上的整数。
[0014] 根据本发明一优选实施例,在所述获取不同部分的源代码过程中,记录带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的请求表单ID;
[0015] 在所述步骤S2中获取所述不同的请求表单ID对应的请求表单。
[0016] 根据本发明一优选实施例,所述步骤S3中对各请求表单检测是否存在CSRF漏洞具体包括:
[0017] 判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,所述待检测URL存在CSRF漏洞。
[0018] 根据本发明一优选实施例,如果请求表单不存在表示提交操作的标签,则确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则确定该请求表单为嫌疑表单。
[0019] 根据本发明一优选实施例,如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的请求表单中包含Token数据,则从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
[0020] 根据本发明一优选实施例,所述步骤S3中对各请求表单检测是否存在CSRF漏洞具体包括:
[0021] 从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
[0022] 根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体包括:
[0023] 遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
[0024] 根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体包括:
[0025] 遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。
[0026] 根据本发明一优选实施例,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞具体包括:
[0027] 如果 则确定该请求表单不存在CSRF漏洞,否则确定该请求表单存在CSRF漏洞,其中所述M为嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求的返回页面源代码和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。
[0028] 一种检测跨站请求伪造CSRF漏洞的装置,该装置包括:
[0029] 代码获取单元,用于获取待检测URL对应的登录页面的源代码;
[0030] 表单提取单元,用于从所述代码获取单元获取的登录页面的源代码中提取请求表单;
[0031] 漏洞检测单元,用于对所述表单提取单元提取的请求表单分别检测是否存在CSRF漏洞。
[0032] 根据本发明一优选实施例,所述代码获取单元具体配置为:
[0033] 将不带cookie请求所述待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的部分为所述待检测URL对应的登录页面的源代码。
[0034] 根据本发明一优选实施例,该装置还包括:
[0035] 噪声过滤单元,用于对所述待检测URL进行N次请求,对N次请求得到的页面源代码取交集,所述N为2以上的整数;
[0036] 所述代码获取单元在所述噪声过滤单元取交集得到的页面源代码基础上,获取待检测URL对应的登录页面的源代码。
[0037] 根据本发明一优选实施例,所述代码获取单元在获取不同部分的源代码过程中,记录带cookie请求所述待检测URL获得的页面源代码中与不带cookie请求所述待检测URL获得的页面的源代码不同的请求表单ID;
[0038] 所述表单提取单元获取所述不同的请求表单ID对应的请求表单。
[0039] 根据本发明一优选实施例,所述漏洞检测单元包括:
[0040] 表单分类子单元,用于判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,所述待检测URL存在CSRF漏洞。
[0041] 根据本发明一优选实施例,如果请求表单不存在表示提交操作的标签,则所述表单分类子单元确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则所述表单分类子单元确定该请求表单为嫌疑表单。
[0042] 根据本发明一优选实施例,所述漏洞检测单元还包括:漏洞检测子单元;
[0043] 所述表单分类子单元还用于如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的请求表单中包含Token数据,则将该请求表单提供给所述漏洞检测子单元;
[0044] 所述漏洞检测子单元,用于从该请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
[0045] 根据本发明一优选实施例,所述漏洞检测单元具体包括:
[0046] 请求伪造子单元,用于从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求;
[0047] 相似度判断子单元,用于对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
[0048] 根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:
[0049] 遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
[0050] 根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:
[0051] 遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。根据本发明一优选实施例,如果则确定该请求表单不存在CSRF漏洞,否则确定该请求表单存在CSRF漏洞,其中所述M为嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求的返回页面源代码和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。
[0052] 由以上技术方案可以看出,CSRF漏洞通常仅存在于用户登录页面,因此本发明首先获取待检测URL对应的登录页面的源代码,从登录页面的源代码中提取请求表单进行CSRF漏洞检测,而不是针对所有的页面源代码中的请求表单进行CSRF漏洞检测,从而减少了对大量没有危害性的请求表单的分析,节约了时间,提高了检测效率。【附图说明】
[0053] 图1为本发明实施例一提供的检测CSRF漏洞的方法流程图
[0054] 图2为本发明实施例二提供的检测CSRF漏洞的方法流程图;
[0055] 图3为本发明实施例三提供的检测CSRF漏洞的装置结构图;
[0056] 图4为本发明实施例四提供的检测CSRF漏洞的装置结构图。【具体实施方式】
[0057] 为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0058] 实施例一、
[0059] 图1为本发明实施例一提供的检测CSRF漏洞的方法流程图,如图1所示,该方法包括:
[0060] 步骤101:对待检测URL的页面源代码进行噪声过滤。
[0061] 本步骤是为了筛除待检测URL的页面源代码中与上下文不相关的内容,这些页面内容通常是诸如广告等,这些内容是没有检测价值的,可以过滤掉。
[0062] 由于通常这些诸如广告等与上下文不相关的内容是动态的,因此噪声过滤的方式可以采用对待检测URL进行N次请求,将N次请求的页面中变化的部分过滤掉,保留不变的部分。也就是说,对待检测URL进行N次请求,对N次请求得到的页面源代码进行取交集(rdiff)操作,对取交集得到的页面源代码进行后续步骤。N为大于或等于2的整数,N的大小取决于采用的检测精度
[0063] 需要说明的是,本步骤的目的是为了进一步提高检测效率而采用的优选步骤,当然也可以不执行本步骤,直接执行步骤102。
[0064] 步骤102:获取待检测URL对应的登录页面的源代码,从获取的源代码中提取请求表单。
[0065] 经过对CSRF漏洞原理的分析,只有登录页面上的请求表单才具有检测价值,因此首先获取待检测URL对应的登录页面的源代码,所谓登录页面的源代码指的是带有cookie对该待检测URL进行请求获取到的页面源代码。
[0066] 获取的方式可以为:将不带cookie请求该待检测URL获得的页面的源代码和带cookie请求该待检测URL获得的页面的源代码进行对比(diff操作),获取带cookie请求获得的页面源代码中与不带cookie请求获得的页面源代码不同的那部分源代码。具体在获取过程中,可以记录带cookie请求待检测URL获得的页面源代码中与不带cookie请求待检测URL获得的页面源代码不同的请求表单ID,然后获取获取该请求表单ID对应的请求表单即为登录页面的请求表单。如果执行了步骤101,则该部分源代码是在步骤101得到的源代码基础之上的。
[0067] 例如,可以首先多次带有cookie对该待检测URL进行请求,将多次请求获取到的页面源代码取交集,并且多次不带cookie对该待检测URL进行请求,将多次请求获取到的页面源代码取交集,将带有cookie请求并取交集得到的页面源代码与不带cookie请求并取交集得到的页面源代码进行diff操作,diff操作之后得到的请求表单中属于带cookie请求待检测URL的请求表单就是待检测URL对应的登录页面的源代码,diff操作之后得到的请求表单中属于不带cookie请求待检测URL的请求表单则不是。
[0068] 经过本步骤后,已经对请求表单进行了一部分筛选,相比较现有技术而言,提高了检测效率,可以直接利用这部分请求表单进行CSRF漏洞的检测。CSRF漏洞的检测方式可以采用现有技术的实现方式,即分别针对提取的请求表单执行以下步骤:
[0069] 步骤103:从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
[0070] 本步骤中,嫌疑请求和伪造请求的构造均是基于分析请求表单中的参数进行的,即遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,对嫌疑参数进行赋值,构造的嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,并对cookie赋予不同的可登陆的值(该可登陆的值是系统预先就获知的)。
[0071] 优选地,两返回结果之间的相似程度可以通过相同的标签数来反映,假设嫌疑请求的返回页面的源代码中标签数为M,伪造请求返回页面的源代码中标签数为N,两请求的返回页面的源代码中相同标签数为S,如果 TH为一个预设的经验值,例如0.3,则认为该请求表单不存在CSRF漏洞,否则认为该请求表单存在CSRF漏洞。
[0072] 本实施例的原理在于,请求表单提交后会被系统验证,只有合法的cookie的请求表单才能够通过验证提交成功,因此,对于构造的伪造请求来说,cookie是随机赋值的,其理论上不能够通过验证,如果通过验证了,则说明没有验证环节,存在CSRF漏洞,而验证通过时会返回相似页面。
[0073] 除了上述实施例一之外,本发明实施例还提供一种优选的实施方式,通过对提取的请求表单进行分析,对请求表单首先划分成安全表单、存在CSRF漏洞的表单和嫌疑表单,对嫌疑表单再进一步进行构造请求并基于返回结果的比对确定是否存在CSRF漏洞,从而提高检测CSRF漏洞的准确率。下面通过实施例二对该优选实施方式进行描述。
[0074] 实施例二、
[0075] 图2为本发明实施例二提供的检测CSRF漏洞的方法流程图,如图2所示,该方法包括:
[0076] 步骤201和步骤202同实施例一中的步骤101和步骤102,在此不再赘述。
[0077] 步骤203:对提取的请求表单依次执行以下操作:
[0078] 判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,该待检测URL存在CSRF漏洞;如果不存在表示提交操作的标签,则确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则确定该请求表单为嫌疑表单。
[0079] 本步骤实际上是对请求表单的标签和属性值进行分析以对请求表单进行分类,分类为:存在CSRF漏洞的请求表单、安全的请求表单和嫌疑的请求表单。分析的具体流程可以为:
[0080] S1、判断请求表单中是否存在指示提交操作的标签,也就是判断是否存在type为submit的input标签或者type为submit的button标签,如果是,执行S2;否则,确定该请求表单安全,结束对该请求表单的分析。
[0081] S2、判断请求表单中是否存在包含隐藏域的标签,也就是判断是否存在type为hidden且name和value都不为空的input标签或者type为password的input标签,如果是,确认该请求表单为嫌疑表单;否则,说明没有隐藏域对请求表单进行保护,该请求表单存在CSRF漏洞,待检测URL存在CSRF漏洞。
[0082] S3、如果请求表单存在type为hidden且name和value都不为空的input标签,则判断请求表单中是否包含Token数据,如果否,确定该请求表单存在CSRF漏洞,如果是,对该请求表单执行步骤204。
[0083] Token数据通常具有这样的特征:不可逆的、唯一的、用过即变的、不可猜测的、有时效性的、区分用户身份的、区分域的,不能是URL get参数和js执行脚本的。如果请求表单中不包含Token数据,则通常是存在CSRF漏洞,反之则有可能存在CSRF漏洞。
[0084] 如果请求表单满足以下条件之一,则认为包含Token数据:
[0085] 条件一、name为"_FORM_TOKEN"、"_REQUESTDIGEST"或"form_token"等Token经常使用的变量名中的一个且value的长度大于等于8。
[0086] 条件二、value为数字或字母且随机排列,更具体的可以为:value为长度不小于6的数字与字母的结合。例如:value的形式满足正则表达式"^[0-9a-f]{8,}|[0-9A-F]{8,}$",或者,"^[A-Za-z0-9+/=]{8,}$″,或者,"^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$"等等。
[0087] 步骤204:从嫌疑表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果以确定该请求表单是否存在CSRF漏洞。
[0088] 在本步骤中,嫌疑请求和伪造请求的构造方式同样基于分析嫌疑表单中的参数进行:遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,对嫌疑参数进行赋值保证构造的嫌疑请求和伪造请求的嫌疑参数具有相同的值,保持cookie不变即嫌疑请求和伪造请求的cookie相同,均采用嫌疑表单中的cookie,在嫌疑表单中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值,这样构造出的嫌疑请求和伪造请求中token数据不同。
[0089] 然后,执行嫌疑请求和伪造请求并收集返回结果,假设嫌疑请求的返回页面的源代码中标签数为M,伪造请求返回页面的源代码中标签数为N,嫌疑请求和伪造请求的返回页面的源代码中相同标签数为S,如果 TH为一个预设的经验值,例如0.3,则认为该请求表单(即嫌疑表单)不存在CSRF漏洞,否则认为该请求表单(即嫌疑表单)存在CSRF漏洞。
[0090] 本实施例的原理在于,请求表单提交后其中的token值会被系统验证,如果随机对token进行赋值,理论上不能够通过验证,如果通过验证了,则说明没有验证环节,存在CSRF漏洞,而验证通过时会返回相似页面。为了保证验证不通过可能由于cookie引起,在对token数据进行随机赋值时,保证cookie不变。
[0091] 当然在本实施例中也可以采用如实施例一中所述的通过对cookie随机赋值的方式构造伪造请求。
[0092] 最终输出检测结果时,如果检测到待检测URL存在CSRF漏洞,在输出待检测URL存在CSRF漏洞之外,还可以输出存在CSRF漏洞的请求表单的ID。
[0093] 以上是对本发明所提供的方法进行的详细描述,下面通过实施例三和实施例四分别对本发明所提供的装置进行详细描述。
[0094] 实施例三、
[0095] 图3为本发明实施例三提供的装置结构图,如图3所示,该装置包括:噪声过滤单元300、代码获取单元310、表单提取单元320和漏洞检测单元330。
[0096] 噪声过滤单元300,用于对待检测URL的页面源代码进行噪声过滤,筛除待检测URL的页面源代码中与上下文不相关的内容,这些页面内容通常是诸如广告等。具体为:对待检测URL进行N次请求,对N次请求得到的页面源代码取交集,所述N为2以上的整数。
[0097] 代码获取单元310,用于在噪声过滤单元300取交集得到的页面源代码基础上,获取待检测URL对应的登录页面的源代码。
[0098] 上述噪声过滤单元300并不是必要的单元,其目的是为了更进一步提高检测效率,也可以没有该单元,此时,代码获取单元310直接获取待检测URL对应的登录页面的源代码。
[0099] 登录页面的源代码指的是带有cookie对该待检测URL进行请求获取到的页面源代码,获取方式可以具体为:将不带cookie请求所述待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的部分为所述待检测URL对应的登录页面的源代码。
[0100] 表单提取单元320,用于从代码获取单元310获取的源代码中提取请求表单。
[0101] 代码获取单元310在将不带cookie请求待检测URL获得的页面源代码和带cookie请求待检测URL获得的页面的源代码进行对比获取不同部分的源代码过程中,记录带cookie请求该待检测URL获得的页面源代码中与不带cookie请求的待检测URL获得的页面的源代码不同的请求表单ID(form ID),这样表单提取单元320就可以获取该不同的form id所对应的请求表单。
[0102] 漏洞检测单元330,用于对提取的请求表单分别检测是否存在CSRF漏洞。对应于实施例一中的实施方式,漏洞检测单元330可以具体包括:请求伪造子单元331和相似度判断子单元332。
[0103] 请求伪造子单元331,用于从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求。
[0104] 在执行了嫌疑请求和伪造请求之后,相似度判断子单元332,用于对比嫌疑请求和伪造请求的返回结果之间的相似度以确定是否存在CSRF漏洞。
[0105] 具体地,嫌疑请求和伪造请求的构造可以具体为:遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
[0106] 两返回结果之间的相似程度可以通过相同的标签数来反映,假设嫌疑请求的返回页面的源代码中标签数为M,伪造请求返回页面的源代码中标签数为N,嫌疑请求和伪造请求的返回页面的源代码中相同标签数为S,如果 TH为一个预设的经验值,例如0.3,则认为该请求表单不存在CSRF漏洞,否则认为该请求表单存在CSRF漏洞。
[0107] 本发明还提供了一种优选的结构,从而提高检测CSRF漏洞的准确率,具体参见实施例四。
[0108] 实施例四、
[0109] 图4为本发明实施例四提供的装置结构图,如图4所示,该装置同样包括如下四个单元:噪声过滤单元300、代码获取单元310、表单提取单元320和漏洞检测单元430。
[0110] 其中噪声过滤单元300、代码获取单元310和表单提取单元320与实施例三中相同,在此不再赘述。
[0111] 在该实施例中漏洞检测单元430具体包括:
[0112] 表单分类子单元431,用于判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,待检测URL存在CSRF漏洞;如果请求表单不存在表示提交操作的标签,则确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则确定该请求表单为嫌疑表单。
[0113] 其中,表示提交操作的标签包括:type为submit的input标签或者type为submit的button标签。包含隐藏域的标签包括:type为hidden且name和value都不为空的input标签或者type为password的input标签。
[0114] 更进一步地,漏洞检测单元430还可以包括:漏洞检测子单元432。
[0115] 表单分类子单元431还用于如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的中包含Token数据,则将该嫌疑表单提供给漏洞检测子单元432。
[0116] 其中,如果请求表单满足以下条件之一,则认为包含Token数据:
[0117] 条件一、name为"_FORM_TOKEN"、"_REQUESTDIGEST"或"form_token"等Token经常使用的参数名中的一个且value的长度大于等于8。
[0118] 条件二、value为数字或字母且随机排列,更具体的value为长度不小于6的数字与字母的组合。例如:value的形式满足正则表达式"^[0-9a-f]{8,}|[0-9A-F]{8,}$″,或者,"^[A-Za-z0-9+/=]{8,}$″,或者,"^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$"等等。
[0119] 漏洞检测子单元432,用于从嫌疑表单中提取参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果以确定是否存在CSRF漏洞。其中,从该嫌疑表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。
[0120] 具体地,如果 则漏洞检测子单元432确定该请求表单(即嫌疑表单)不存在CSRF漏洞,否则确定请求表单(即嫌疑表单)存在CSRF漏洞,其中M为其中嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。
[0121] 由以上描述可以看出,本发明提供的方法和装置具备以下优点:
[0122] 1)经发明人分析,CSRF漏洞通常仅存在于用户登录页面,因此本发明首先获取待检测URL对应的登录页面的源代码,从登录页面的源代码中提取请求表单进行CSRF漏洞检测,而不是针对所有的页面源代码中的请求表单进行CSRF漏洞检测,从而减少了对大量没有危害性的请求表单的分析,节约了时间,提高了检测效率。
[0123] 2)本发明在获取待检测URL的登录页面的源代码之前,首先进行了噪声过滤,从而过滤掉页面源代码中与上下文无关的动态内容,诸如广告,从而更进一步提高了检测效率。
[0124] 3)在提取出有价值的请求表单后,首先对请求表单进行基于标签和属性值的分析,即将请求表单分为存在CSRF漏洞的请求表单、安全的请求表单和嫌疑表单,对嫌疑表单进一步基于构造伪造请求并对比返回结果的方式分析是否存在CSRF漏洞,双重保险来判断CSRF漏洞,从而提高了检测精度。
[0125] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈