CN103679018A - 一种检测csrf漏洞的方法和装置 - Google Patents

一种检测csrf漏洞的方法和装置 Download PDF

Info

Publication number
CN103679018A
CN103679018A CN201210328780.3A CN201210328780A CN103679018A CN 103679018 A CN103679018 A CN 103679018A CN 201210328780 A CN201210328780 A CN 201210328780A CN 103679018 A CN103679018 A CN 103679018A
Authority
CN
China
Prior art keywords
request
list
suspicion
source code
csrf
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201210328780.3A
Other languages
English (en)
Other versions
CN103679018B (zh
Inventor
张娜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201210328780.3A priority Critical patent/CN103679018B/zh
Publication of CN103679018A publication Critical patent/CN103679018A/zh
Application granted granted Critical
Publication of CN103679018B publication Critical patent/CN103679018B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

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

Description

一种检测CSRF漏洞的方法和装置
【技术领域】
本发明涉及计算机安全技术领域,特别涉及一种检测跨站请求伪造(CSRF)漏洞的方法和装置。
【背景技术】
产品的安全涉及到用户的利益,若攻击者利用跨站请求伪造(CSRF,Cross-site request forgery)漏洞对合法用户进行攻击,便可以在合法用户无意识的情况下进行某些隐私操作,比如进行转账操作,这就会直接关系到用户的经济利益,因此,检测CSRF漏洞十分重要。
现有检测CSRF漏洞的方式是对某一页面的所有请求表单(HTTP请求信息)都进行收集和识别以检测是否存在CSRF嫌疑,然后通过构造伪造请求并对比伪造请求的返回信息之间的相似度来确定是否是有CSRF攻击倾向的伪造请求。然而这种方式需要针对所有HTTP请求信息都进行收集分析,但有些请求表单是良性的,所谓良性的表单是指即使这个表单存在CSRF漏洞但也不影响到业务逻辑,那么此表单就没有危害性。由于对请求表单进行CSRF识别的复杂度较高,对大量没有危害性的请求表单进行分析显然浪费了时间,降低了检测效率。
【发明内容】
本发明提供了一种检测CSRF漏洞的方法和装置,以便于提高CSRF漏洞的检测效率。
具体技术方案如下:
一种检测跨站请求伪造(CSRF)漏洞的方法,该方法包括:
S1、获取待检测URL对应的登录页面的源代码;
S2、从获取的登录页面的源代码中提取请求表单;
S3、对提取的请求表单分别检测是否存在CSRF漏洞。
根据本发明一优选实施例,所述步骤S1具体包括:
将不带cookie请求所述待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的部分为所述待检测URL对应的登录页面的源代码。
根据本发明一优选实施例,在所述步骤S1之前还包括对待检测URL的页面源代码进行的噪声过滤步骤:
对所述待检测URL进行N次请求,对N次请求得到的页面源代码取交集,在取交集得到的页面源代码基础上执行步骤S1,所述N为2以上的整数。
根据本发明一优选实施例,在所述获取不同部分的源代码过程中,记录带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的请求表单ID;
在所述步骤S2中获取所述不同的请求表单ID对应的请求表单。
根据本发明一优选实施例,所述步骤S3中对各请求表单检测是否存在CSRF漏洞具体包括:
判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,所述待检测URL存在CSRF漏洞。
根据本发明一优选实施例,如果请求表单不存在表示提交操作的标签,则确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则确定该请求表单为嫌疑表单。
根据本发明一优选实施例,如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的请求表单中包含Token数据,则从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
根据本发明一优选实施例,所述步骤S3中对各请求表单检测是否存在CSRF漏洞具体包括:
从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体包括:
遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体包括:
遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。
根据本发明一优选实施例,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞具体包括:
如果
Figure BDA00002108724700031
则确定该请求表单不存在CSRF漏洞,否则确定该请求表单存在CSRF漏洞,其中所述M为嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求的返回页面源代码和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。
一种检测跨站请求伪造CSRF漏洞的装置,该装置包括:
代码获取单元,用于获取待检测URL对应的登录页面的源代码;
表单提取单元,用于从所述代码获取单元获取的登录页面的源代码中提取请求表单;
漏洞检测单元,用于对所述表单提取单元提取的请求表单分别检测是否存在CSRF漏洞。
根据本发明一优选实施例,所述代码获取单元具体配置为:
将不带cookie请求所述待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的部分为所述待检测URL对应的登录页面的源代码。
根据本发明一优选实施例,该装置还包括:
噪声过滤单元,用于对所述待检测URL进行N次请求,对N次请求得到的页面源代码取交集,所述N为2以上的整数;
所述代码获取单元在所述噪声过滤单元取交集得到的页面源代码基础上,获取待检测URL对应的登录页面的源代码。
根据本发明一优选实施例,所述代码获取单元在获取不同部分的源代码过程中,记录带cookie请求所述待检测URL获得的页面源代码中与不带cookie请求所述待检测URL获得的页面的源代码不同的请求表单ID;
所述表单提取单元获取所述不同的请求表单ID对应的请求表单。
根据本发明一优选实施例,所述漏洞检测单元包括:
表单分类子单元,用于判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,所述待检测URL存在CSRF漏洞。
根据本发明一优选实施例,如果请求表单不存在表示提交操作的标签,则所述表单分类子单元确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则所述表单分类子单元确定该请求表单为嫌疑表单。
根据本发明一优选实施例,所述漏洞检测单元还包括:漏洞检测子单元;
所述表单分类子单元还用于如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的请求表单中包含Token数据,则将该请求表单提供给所述漏洞检测子单元;
所述漏洞检测子单元,用于从该请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
根据本发明一优选实施例,所述漏洞检测单元具体包括:
请求伪造子单元,用于从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求;
相似度判断子单元,用于对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:
遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
根据本发明一优选实施例,所述从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:
遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。根据本发明一优选实施例,如果
Figure BDA00002108724700051
则确定该请求表单不存在CSRF漏洞,否则确定该请求表单存在CSRF漏洞,其中所述M为嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求的返回页面源代码和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。
由以上技术方案可以看出,CSRF漏洞通常仅存在于用户登录页面,因此本发明首先获取待检测URL对应的登录页面的源代码,从登录页面的源代码中提取请求表单进行CSRF漏洞检测,而不是针对所有的页面源代码中的请求表单进行CSRF漏洞检测,从而减少了对大量没有危害性的请求表单的分析,节约了时间,提高了检测效率。
【附图说明】
图1为本发明实施例一提供的检测CSRF漏洞的方法流程图;
图2为本发明实施例二提供的检测CSRF漏洞的方法流程图;
图3为本发明实施例三提供的检测CSRF漏洞的装置结构图;
图4为本发明实施例四提供的检测CSRF漏洞的装置结构图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
实施例一、
图1为本发明实施例一提供的检测CSRF漏洞的方法流程图,如图1所示,该方法包括:
步骤101:对待检测URL的页面源代码进行噪声过滤。
本步骤是为了筛除待检测URL的页面源代码中与上下文不相关的内容,这些页面内容通常是诸如广告等,这些内容是没有检测价值的,可以过滤掉。
由于通常这些诸如广告等与上下文不相关的内容是动态的,因此噪声过滤的方式可以采用对待检测URL进行N次请求,将N次请求的页面中变化的部分过滤掉,保留不变的部分。也就是说,对待检测URL进行N次请求,对N次请求得到的页面源代码进行取交集(rdiff)操作,对取交集得到的页面源代码进行后续步骤。N为大于或等于2的整数,N的大小取决于采用的检测精度。
需要说明的是,本步骤的目的是为了进一步提高检测效率而采用的优选步骤,当然也可以不执行本步骤,直接执行步骤102。
步骤102:获取待检测URL对应的登录页面的源代码,从获取的源代码中提取请求表单。
经过对CSRF漏洞原理的分析,只有登录页面上的请求表单才具有检测价值,因此首先获取待检测URL对应的登录页面的源代码,所谓登录页面的源代码指的是带有cookie对该待检测URL进行请求获取到的页面源代码。
获取的方式可以为:将不带cookie请求该待检测URL获得的页面的源代码和带cookie请求该待检测URL获得的页面的源代码进行对比(diff操作),获取带cookie请求获得的页面源代码中与不带cookie请求获得的页面源代码不同的那部分源代码。具体在获取过程中,可以记录带cookie请求待检测URL获得的页面源代码中与不带cookie请求待检测URL获得的页面源代码不同的请求表单ID,然后获取获取该请求表单ID对应的请求表单即为登录页面的请求表单。如果执行了步骤101,则该部分源代码是在步骤101得到的源代码基础之上的。
例如,可以首先多次带有cookie对该待检测URL进行请求,将多次请求获取到的页面源代码取交集,并且多次不带cookie对该待检测URL进行请求,将多次请求获取到的页面源代码取交集,将带有cookie请求并取交集得到的页面源代码与不带cookie请求并取交集得到的页面源代码进行diff操作,diff操作之后得到的请求表单中属于带cookie请求待检测URL的请求表单就是待检测URL对应的登录页面的源代码,diff操作之后得到的请求表单中属于不带cookie请求待检测URL的请求表单则不是。
经过本步骤后,已经对请求表单进行了一部分筛选,相比较现有技术而言,提高了检测效率,可以直接利用这部分请求表单进行CSRF漏洞的检测。CSRF漏洞的检测方式可以采用现有技术的实现方式,即分别针对提取的请求表单执行以下步骤:
步骤103:从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果之间的相似程度以确定是否存在CSRF漏洞。
本步骤中,嫌疑请求和伪造请求的构造均是基于分析请求表单中的参数进行的,即遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,对嫌疑参数进行赋值,构造的嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,并对cookie赋予不同的可登陆的值(该可登陆的值是系统预先就获知的)。
优选地,两返回结果之间的相似程度可以通过相同的标签数来反映,假设嫌疑请求的返回页面的源代码中标签数为M,伪造请求返回页面的源代码中标签数为N,两请求的返回页面的源代码中相同标签数为S,如果
Figure BDA00002108724700081
TH为一个预设的经验值,例如0.3,则认为该请求表单不存在CSRF漏洞,否则认为该请求表单存在CSRF漏洞。
本实施例的原理在于,请求表单提交后会被系统验证,只有合法的cookie的请求表单才能够通过验证提交成功,因此,对于构造的伪造请求来说,cookie是随机赋值的,其理论上不能够通过验证,如果通过验证了,则说明没有验证环节,存在CSRF漏洞,而验证通过时会返回相似页面。
除了上述实施例一之外,本发明实施例还提供一种优选的实施方式,通过对提取的请求表单进行分析,对请求表单首先划分成安全表单、存在CSRF漏洞的表单和嫌疑表单,对嫌疑表单再进一步进行构造请求并基于返回结果的比对确定是否存在CSRF漏洞,从而提高检测CSRF漏洞的准确率。下面通过实施例二对该优选实施方式进行描述。
实施例二、
图2为本发明实施例二提供的检测CSRF漏洞的方法流程图,如图2所示,该方法包括:
步骤201和步骤202同实施例一中的步骤101和步骤102,在此不再赘述。
步骤203:对提取的请求表单依次执行以下操作:
判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,该待检测URL存在CSRF漏洞;如果不存在表示提交操作的标签,则确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则确定该请求表单为嫌疑表单。
本步骤实际上是对请求表单的标签和属性值进行分析以对请求表单进行分类,分类为:存在CSRF漏洞的请求表单、安全的请求表单和嫌疑的请求表单。分析的具体流程可以为:
S1、判断请求表单中是否存在指示提交操作的标签,也就是判断是否存在type为submit的input标签或者type为submit的button标签,如果是,执行S2;否则,确定该请求表单安全,结束对该请求表单的分析。
S2、判断请求表单中是否存在包含隐藏域的标签,也就是判断是否存在type为hidden且name和value都不为空的input标签或者type为password的input标签,如果是,确认该请求表单为嫌疑表单;否则,说明没有隐藏域对请求表单进行保护,该请求表单存在CSRF漏洞,待检测URL存在CSRF漏洞。
S3、如果请求表单存在type为hidden且name和value都不为空的input标签,则判断请求表单中是否包含Token数据,如果否,确定该请求表单存在CSRF漏洞,如果是,对该请求表单执行步骤204。
Token数据通常具有这样的特征:不可逆的、唯一的、用过即变的、不可猜测的、有时效性的、区分用户身份的、区分域的,不能是URL get参数和js执行脚本的。如果请求表单中不包含Token数据,则通常是存在CSRF漏洞,反之则有可能存在CSRF漏洞。
如果请求表单满足以下条件之一,则认为包含Token数据:
条件一、name为"_FORM_TOKEN"、"_REQUESTDIGEST"或"form_token"等Token经常使用的变量名中的一个且value的长度大于等于8。
条件二、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}$"等等。
步骤204:从嫌疑表单中提取嫌疑参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果以确定该请求表单是否存在CSRF漏洞。
在本步骤中,嫌疑请求和伪造请求的构造方式同样基于分析嫌疑表单中的参数进行:遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,对嫌疑参数进行赋值保证构造的嫌疑请求和伪造请求的嫌疑参数具有相同的值,保持cookie不变即嫌疑请求和伪造请求的cookie相同,均采用嫌疑表单中的cookie,在嫌疑表单中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值,这样构造出的嫌疑请求和伪造请求中token数据不同。
然后,执行嫌疑请求和伪造请求并收集返回结果,假设嫌疑请求的返回页面的源代码中标签数为M,伪造请求返回页面的源代码中标签数为N,嫌疑请求和伪造请求的返回页面的源代码中相同标签数为S,如果
Figure BDA00002108724700101
TH为一个预设的经验值,例如0.3,则认为该请求表单(即嫌疑表单)不存在CSRF漏洞,否则认为该请求表单(即嫌疑表单)存在CSRF漏洞。
本实施例的原理在于,请求表单提交后其中的token值会被系统验证,如果随机对token进行赋值,理论上不能够通过验证,如果通过验证了,则说明没有验证环节,存在CSRF漏洞,而验证通过时会返回相似页面。为了保证验证不通过可能由于cookie引起,在对token数据进行随机赋值时,保证cookie不变。
当然在本实施例中也可以采用如实施例一中所述的通过对cookie随机赋值的方式构造伪造请求。
最终输出检测结果时,如果检测到待检测URL存在CSRF漏洞,在输出待检测URL存在CSRF漏洞之外,还可以输出存在CSRF漏洞的请求表单的ID。
以上是对本发明所提供的方法进行的详细描述,下面通过实施例三和实施例四分别对本发明所提供的装置进行详细描述。
实施例三、
图3为本发明实施例三提供的装置结构图,如图3所示,该装置包括:噪声过滤单元300、代码获取单元310、表单提取单元320和漏洞检测单元330。
噪声过滤单元300,用于对待检测URL的页面源代码进行噪声过滤,筛除待检测URL的页面源代码中与上下文不相关的内容,这些页面内容通常是诸如广告等。具体为:对待检测URL进行N次请求,对N次请求得到的页面源代码取交集,所述N为2以上的整数。
代码获取单元310,用于在噪声过滤单元300取交集得到的页面源代码基础上,获取待检测URL对应的登录页面的源代码。
上述噪声过滤单元300并不是必要的单元,其目的是为了更进一步提高检测效率,也可以没有该单元,此时,代码获取单元310直接获取待检测URL对应的登录页面的源代码。
登录页面的源代码指的是带有cookie对该待检测URL进行请求获取到的页面源代码,获取方式可以具体为:将不带cookie请求所述待检测URL获得的页面源代码和带cookie请求所述待检测URL获得的页面的源代码进行对比,获取带cookie请求所述待检测URL获得的页面的源代码中与不带cookie请求所述待检测URL获得的页面源代码不同的部分为所述待检测URL对应的登录页面的源代码。
表单提取单元320,用于从代码获取单元310获取的源代码中提取请求表单。
代码获取单元310在将不带cookie请求待检测URL获得的页面源代码和带cookie请求待检测URL获得的页面的源代码进行对比获取不同部分的源代码过程中,记录带cookie请求该待检测URL获得的页面源代码中与不带cookie请求的待检测URL获得的页面的源代码不同的请求表单ID(form ID),这样表单提取单元320就可以获取该不同的form id所对应的请求表单。
漏洞检测单元330,用于对提取的请求表单分别检测是否存在CSRF漏洞。对应于实施例一中的实施方式,漏洞检测单元330可以具体包括:请求伪造子单元331和相似度判断子单元332。
请求伪造子单元331,用于从请求表单中提取嫌疑参数并构造嫌疑请求和伪造请求。
在执行了嫌疑请求和伪造请求之后,相似度判断子单元332,用于对比嫌疑请求和伪造请求的返回结果之间的相似度以确定是否存在CSRF漏洞。
具体地,嫌疑请求和伪造请求的构造可以具体为:遍历请求表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,嫌疑请求和伪造请求采用请求表单中的Token数据,对嫌疑请求和伪造请求中的cookie赋予不同的可登陆的值。
两返回结果之间的相似程度可以通过相同的标签数来反映,假设嫌疑请求的返回页面的源代码中标签数为M,伪造请求返回页面的源代码中标签数为N,嫌疑请求和伪造请求的返回页面的源代码中相同标签数为S,如果
Figure BDA00002108724700121
TH为一个预设的经验值,例如0.3,则认为该请求表单不存在CSRF漏洞,否则认为该请求表单存在CSRF漏洞。
本发明还提供了一种优选的结构,从而提高检测CSRF漏洞的准确率,具体参见实施例四。
实施例四、
图4为本发明实施例四提供的装置结构图,如图4所示,该装置同样包括如下四个单元:噪声过滤单元300、代码获取单元310、表单提取单元320和漏洞检测单元430。
其中噪声过滤单元300、代码获取单元310和表单提取单元320与实施例三中相同,在此不再赘述。
在该实施例中漏洞检测单元430具体包括:
表单分类子单元431,用于判断请求表单是否存在表示提交操作的标签且不存在包含隐藏域的标签,如果是,确定该请求表单存在CSRF漏洞,待检测URL存在CSRF漏洞;如果请求表单不存在表示提交操作的标签,则确定该请求表单安全;如果存在表示提交操作的标签且存在包含隐藏域的标签,则确定该请求表单为嫌疑表单。
其中,表示提交操作的标签包括:type为submit的input标签或者type为submit的button标签。包含隐藏域的标签包括:type为hidden且name和value都不为空的input标签或者type为password的input标签。
更进一步地,漏洞检测单元430还可以包括:漏洞检测子单元432。
表单分类子单元431还用于如果确定为嫌疑表单的请求表单中不包含Token数据,则确定该请求表单为存在CSRF漏洞的表单;如果确定为嫌疑表单的中包含Token数据,则将该嫌疑表单提供给漏洞检测子单元432。
其中,如果请求表单满足以下条件之一,则认为包含Token数据:
条件一、name为"_FORM_TOKEN"、"_REQUESTDIGEST"或"form_token"等Token经常使用的参数名中的一个且value的长度大于等于8。
条件二、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}$"等等。
漏洞检测子单元432,用于从嫌疑表单中提取参数并构造嫌疑请求和伪造请求,对比嫌疑请求和伪造请求的返回结果以确定是否存在CSRF漏洞。其中,从该嫌疑表单中提取嫌疑参数并构造嫌疑请求和伪造请求具体为:遍历嫌疑表单中的input标签,将input标签中的参数作为嫌疑参数,为嫌疑请求和伪造请求中的嫌疑参数赋予相同的值,保持cookie不变,在嫌疑请求中采用请求表单中的Token数据,对伪造请求中的token数据进行随机赋值。
具体地,如果
Figure BDA00002108724700131
则漏洞检测子单元432确定该请求表单(即嫌疑表单)不存在CSRF漏洞,否则确定请求表单(即嫌疑表单)存在CSRF漏洞,其中M为其中嫌疑请求的返回页面源代码中的标签数,N为伪造请求的返回页面源代码中的标签数,S为嫌疑请求和伪造请求的返回页面源代码中的相同标签数,TH为预设的经验值。
由以上描述可以看出,本发明提供的方法和装置具备以下优点:
1)经发明人分析,CSRF漏洞通常仅存在于用户登录页面,因此本发明首先获取待检测URL对应的登录页面的源代码,从登录页面的源代码中提取请求表单进行CSRF漏洞检测,而不是针对所有的页面源代码中的请求表单进行CSRF漏洞检测,从而减少了对大量没有危害性的请求表单的分析,节约了时间,提高了检测效率。
2)本发明在获取待检测URL的登录页面的源代码之前,首先进行了噪声过滤,从而过滤掉页面源代码中与上下文无关的动态内容,诸如广告,从而更进一步提高了检测效率。
3)在提取出有价值的请求表单后,首先对请求表单进行基于标签和属性值的分析,即将请求表单分为存在CSRF漏洞的请求表单、安全的请求表单和嫌疑表单,对嫌疑表单进一步基于构造伪造请求并对比返回结果的方式分析是否存在CSRF漏洞,双重保险来判断CSRF漏洞,从而提高了检测精度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (22)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210328780.3A CN103679018B (zh) 2012-09-06 2012-09-06 一种检测csrf漏洞的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210328780.3A CN103679018B (zh) 2012-09-06 2012-09-06 一种检测csrf漏洞的方法和装置

Publications (2)

Publication Number Publication Date
CN103679018A true CN103679018A (zh) 2014-03-26
CN103679018B CN103679018B (zh) 2018-06-12

Family

ID=50316528

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210328780.3A Active CN103679018B (zh) 2012-09-06 2012-09-06 一种检测csrf漏洞的方法和装置

Country Status (1)

Country Link
CN (1) CN103679018B (zh)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103944900A (zh) * 2014-04-18 2014-07-23 中国科学院计算技术研究所 一种基于加密的跨站请求攻击防范方法及其装置
CN104573486A (zh) * 2013-10-16 2015-04-29 深圳市腾讯计算机系统有限公司 漏洞检测方法和装置
CN104753730A (zh) * 2013-12-30 2015-07-01 腾讯科技(深圳)有限公司 一种漏洞检测的方法及装置
CN105635064A (zh) * 2014-10-31 2016-06-01 杭州华三通信技术有限公司 Csrf攻击检测方法及装置
CN105740135A (zh) * 2014-12-08 2016-07-06 中国移动通信集团山西有限公司 一种代码审计方法和装置
CN105991615A (zh) * 2015-03-04 2016-10-05 杭州迪普科技有限公司 基于csrf攻击的防护方法及装置
CN106341370A (zh) * 2015-07-07 2017-01-18 北京京东尚科信息技术有限公司 一种防御跨站请求伪造攻击的方法及装置
CN106776975A (zh) * 2016-12-06 2017-05-31 成都知道创宇信息技术有限公司 一种识别网页中CSRF token元素的方法
CN107294994A (zh) * 2017-07-06 2017-10-24 网宿科技股份有限公司 一种基于云平台的csrf防护方法和系统
CN107294919A (zh) * 2016-03-31 2017-10-24 阿里巴巴集团控股有限公司 一种水平权限漏洞的检测方法及装置
CN107370719A (zh) * 2016-05-13 2017-11-21 阿里巴巴集团控股有限公司 异常登录识别方法、装置及系统
CN107682346A (zh) * 2017-10-19 2018-02-09 南京大学 一种csrf攻击的快速定位与识别系统和方法
CN108197467A (zh) * 2018-01-11 2018-06-22 郑州云海信息技术有限公司 一种csrf漏洞的自动化检测方法及系统
CN110875919A (zh) * 2018-12-21 2020-03-10 北京安天网络安全技术有限公司 一种网络威胁的检测方法、装置、电子设备及存储介质
CN110995684A (zh) * 2019-11-26 2020-04-10 西安四叶草信息技术有限公司 漏洞检测方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101356535A (zh) * 2005-11-10 2009-01-28 株式会社Ntt都科摩 一种检测和防止java脚本程序中不安全行为的方法和装置
CN101425937A (zh) * 2007-11-02 2009-05-06 北京启明星辰信息技术有限公司 一种适于高速局域网环境的sql注入攻击检测系统
CN101883024A (zh) * 2010-06-23 2010-11-10 南京大学 一种跨站点伪造请求的动态检测方法
CN101902470A (zh) * 2010-07-14 2010-12-01 南京大学 一种基于表单特征的Web安全漏洞动态检测方法
CN102571846A (zh) * 2010-12-23 2012-07-11 北京启明星辰信息技术股份有限公司 一种转发http请求的方法及装置
CN102624737A (zh) * 2012-03-27 2012-08-01 武汉理工大学 单点登录系统中针对Form身份鉴别的单点登录集成方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101356535A (zh) * 2005-11-10 2009-01-28 株式会社Ntt都科摩 一种检测和防止java脚本程序中不安全行为的方法和装置
CN101425937A (zh) * 2007-11-02 2009-05-06 北京启明星辰信息技术有限公司 一种适于高速局域网环境的sql注入攻击检测系统
CN101883024A (zh) * 2010-06-23 2010-11-10 南京大学 一种跨站点伪造请求的动态检测方法
CN101902470A (zh) * 2010-07-14 2010-12-01 南京大学 一种基于表单特征的Web安全漏洞动态检测方法
CN102571846A (zh) * 2010-12-23 2012-07-11 北京启明星辰信息技术股份有限公司 一种转发http请求的方法及装置
CN102624737A (zh) * 2012-03-27 2012-08-01 武汉理工大学 单点登录系统中针对Form身份鉴别的单点登录集成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王威: ""PHP网站安全性的分析研究及其在图片上传系统中的应用"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104573486A (zh) * 2013-10-16 2015-04-29 深圳市腾讯计算机系统有限公司 漏洞检测方法和装置
CN104573486B (zh) * 2013-10-16 2018-09-28 深圳市腾讯计算机系统有限公司 漏洞检测方法和装置
CN104753730A (zh) * 2013-12-30 2015-07-01 腾讯科技(深圳)有限公司 一种漏洞检测的方法及装置
CN104753730B (zh) * 2013-12-30 2019-01-08 腾讯科技(深圳)有限公司 一种漏洞检测的方法及装置
CN103944900A (zh) * 2014-04-18 2014-07-23 中国科学院计算技术研究所 一种基于加密的跨站请求攻击防范方法及其装置
CN103944900B (zh) * 2014-04-18 2017-11-24 中国科学院计算技术研究所 一种基于加密的跨站请求攻击防范方法及其装置
CN105635064A (zh) * 2014-10-31 2016-06-01 杭州华三通信技术有限公司 Csrf攻击检测方法及装置
CN105635064B (zh) * 2014-10-31 2019-12-06 新华三技术有限公司 Csrf攻击检测方法及装置
CN105740135B (zh) * 2014-12-08 2018-06-26 中国移动通信集团山西有限公司 一种代码审计方法和装置
CN105740135A (zh) * 2014-12-08 2016-07-06 中国移动通信集团山西有限公司 一种代码审计方法和装置
CN105991615A (zh) * 2015-03-04 2016-10-05 杭州迪普科技有限公司 基于csrf攻击的防护方法及装置
CN105991615B (zh) * 2015-03-04 2019-06-07 杭州迪普科技股份有限公司 基于csrf攻击的防护方法及装置
CN106341370A (zh) * 2015-07-07 2017-01-18 北京京东尚科信息技术有限公司 一种防御跨站请求伪造攻击的方法及装置
CN106341370B (zh) * 2015-07-07 2020-11-24 北京京东尚科信息技术有限公司 一种防御跨站请求伪造攻击的方法及装置
CN107294919A (zh) * 2016-03-31 2017-10-24 阿里巴巴集团控股有限公司 一种水平权限漏洞的检测方法及装置
CN107370719A (zh) * 2016-05-13 2017-11-21 阿里巴巴集团控股有限公司 异常登录识别方法、装置及系统
CN106776975A (zh) * 2016-12-06 2017-05-31 成都知道创宇信息技术有限公司 一种识别网页中CSRF token元素的方法
CN107294994A (zh) * 2017-07-06 2017-10-24 网宿科技股份有限公司 一种基于云平台的csrf防护方法和系统
CN107294994B (zh) * 2017-07-06 2020-06-05 网宿科技股份有限公司 一种基于云平台的csrf防护方法和系统
CN107682346A (zh) * 2017-10-19 2018-02-09 南京大学 一种csrf攻击的快速定位与识别系统和方法
CN107682346B (zh) * 2017-10-19 2021-06-25 南京大学 一种csrf攻击的快速定位与识别系统和方法
CN108197467A (zh) * 2018-01-11 2018-06-22 郑州云海信息技术有限公司 一种csrf漏洞的自动化检测方法及系统
CN110875919A (zh) * 2018-12-21 2020-03-10 北京安天网络安全技术有限公司 一种网络威胁的检测方法、装置、电子设备及存储介质
CN110875919B (zh) * 2018-12-21 2022-02-11 北京安天网络安全技术有限公司 一种网络威胁的检测方法、装置、电子设备及存储介质
CN110995684A (zh) * 2019-11-26 2020-04-10 西安四叶草信息技术有限公司 漏洞检测方法及装置
CN110995684B (zh) * 2019-11-26 2022-06-28 西安四叶草信息技术有限公司 漏洞检测方法及装置

Also Published As

Publication number Publication date
CN103679018B (zh) 2018-06-12

Similar Documents

Publication Publication Date Title
CN103679018A (zh) 一种检测csrf漏洞的方法和装置
US10721245B2 (en) Method and device for automatically verifying security event
CN109951500B (zh) 网络攻击检测方法及装置
CN105516128A (zh) 一种Web攻击的检测方法及装置
CN103281320B (zh) 基于网页图标匹配的品牌仿冒网站检测方法
CN109167754A (zh) 一种网络应用层安全防护系统
CN104462152A (zh) 一种网页的识别方法及装置
CN106572117A (zh) 一种WebShell文件的检测方法和装置
CN105844140A (zh) 一种可识别验证码的网站登录暴力破解方法及系统
CN106961419A (zh) WebShell检测方法、装置及系统
CN109922065B (zh) 恶意网站快速识别方法
CN103577755A (zh) 一种基于支持向量机的恶意脚本静态检测方法
CN103209177B (zh) 网络钓鱼攻击的检测方法和装置
CN102467633A (zh) 一种安全浏览网页的方法及其系统
CN102622553A (zh) 检测网页安全的方法及装置
CN108573146A (zh) 一种恶意url检测方法及装置
CN102624713A (zh) 网站篡改识别的方法及装置
CN103166966A (zh) 识别对网站的非法访问请求的方法及装置
CN110020161B (zh) 数据处理方法、日志处理方法和终端
US9124623B1 (en) Systems and methods for detecting scam campaigns
CN105704099A (zh) 一种检测隐藏在网站脚本中非法链接的方法
CN113408281B (zh) 邮箱账号异常检测方法、装置、电子设备及存储介质
CN105354494A (zh) 网页数据篡改的检测方法及装置
CN102385551B (zh) 一种筛选测试用例的方法、装置及系统
CN109039875A (zh) 一种基于链接特征分析的钓鱼邮件检测方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant