一种静态资源文件的检测方法及装置
技术领域
本发明涉及网络安全技术领域,尤其涉及一种静态资源文件的检测方法及装置。
背景技术
现如今,为了提高网站的访问速度,通常会使用CDN(Content Delivery Network,内容分发网络)来缓存静态资源文件,但与此同时该方式也隐含了一个网络安全风险。如果攻击者劫持了CDN中的静态资源文件,可以对该静态资源文件进行肆意篡改,那么在网页加载过程中,客户端可能会获取到被篡改后的静态资源文件,从而对用户带来信息安全风险。
目前,防止有安全风险的静态资源文件危害用户的方法是,使用WEB浏览器提供的SRI(Subresource Integrity,子资源完整性)技术对静态资源文件的进行完整性校验,如果校验结果为不完整,则判定静态资源文件被篡改,从而拒绝执行该静态资源文件。
但是,这种通过静态资源文件完整性校验,以判定静态资源文件是否被篡改的方式,通常判定结果并不准确。比如在网络环境差时,通常也会导致所获取到的静态资源不完整。
发明内容
本发明实施例中提供了一种静态资源文件的检测方法及装置,以解决现有技术中通过静态资源文件完整性校验来判定静态资源文件是否被篡改的方式,通常判定结果不准确的问题。
为解决上述技术问题,本发明是这样实现的:
第一方面,本发明提供了一种静态资源文件的检测方法,该方法包括:
当第一静态资源文件未通过完整性校验时,通过网络地址重新下载所述第一静态资源文件;
在所述网络地址上加入时间戳参数,并通过加入时间戳参数后的网络地址下载第二静态资源文件;
根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持。
优选地,当判断所述第一静态资源文件被劫持后,所述方法还包括:
向服务端发送劫持日志以及重新下载的第一静态资源文件,用于通过服务端对所述劫持日志以及重新下载的第一静态资源文件的分析,确定劫持事件的相关信息。
优选地,当判断所述第一静态资源文件被劫持后,所述方法还包括:
基于所述第二静态资源文件进行页面展示。
优选地,根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持,具体包括:
将重新下载的第一静态资源文件的内容长度与所述第二静态资源文件的内容长度进行对比;
根据对比结果,判断所述第一静态资源文件是否被劫持。
优选地,根据对比结果,判断所述第一静态资源文件是否被劫持,具体包括:
若所述对比结果为内容长度不相等,则判断所述第一静态资源文件被劫持;
若所述对比结果为内容长度相等,则判断所述第一静态资源文件未被劫持。
优选地,该方法还包括:
通过SRI技术对所述第一静态资源文件进行完整性校验。
第二方面,本发明还提供了一种静态资源文件的检测装置,该装置包括:
第一静态资源下载单元,用于当第一静态资源文件未通过完整性校验时,通过网络地址重新下载所述第一静态资源文件;
第二静态资源下载单元,用于在所述网络地址上加入时间戳参数,并通过加入时间戳参数后的网络地址下载第二静态资源文件;
静态资源劫持判断单元,用于根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持。
采用本发明实施例中提供的上述至少一个技术方案,可以达到如下效果:
当第一静态资源文件未通过完整性校验时,先通过网络地址重新下载所述第一静态资源文件,再在所述网络地址上加入时间戳参数后再次下载第二静态资源文件,最后根据重新下载的第一静态资源文件与所述第二静态资源文件的对比来判断所述第一静态资源文件是否被劫持,进而可以准确判断出静态资源文件是因为被劫持而导致静态资源文件完整性校验的校验结果为不完整,从而判定静态资源文件被篡改。因此,解决了现有技术中通过静态资源文件完整性校验来判定静态资源文件是否被篡改的方式,通常判定结果不准确的问题。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明实施例的一部分,本发明实施例的示意性实施例及其说明用于解释本发明实施例,并不构成对本发明实施例的不当限定。在附图中:
图1是本发明的一个实施例中提供的一种静态资源文件的检测方法的流程示意图;
图2是本发明的一个实施例中提供的一种静态资源文件的检测方法的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明的具体实施例及相应的附图对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明实施例的一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明所保护的范围。
以下结合附图,详细说明本发明各实施例中提供的技术方案。
实施例1
为解决现有技术中通过静态资源文件完整性校验来判定静态资源文件是否被篡改的方式,通常判定结果不准确的问题,本发明实施例1中提供了一种静态资源文件的检测方法。
由于当使用SRI技术对静态资源文件进行完整性校验时,校验结果为不完整的原因有以下几种可能:静态资源文件被劫持、网络环境差、静态资源文件本身不完整、浏览器页面包含其他安全校验规则等,只要校验结果为不完整,就直接判定静态资源文件被篡改,这样判定的结果并不准确。因此,可以根据重新下载的第一静态资源文件与所述第二静态资源文件的对比来判断所述第一静态资源文件是否被劫持,进而确定静态资源文件是否被篡改,从而解决现有技术中的问题。
需要说明的是,本发明实施例中提供的一种静态资源文件的检测方法的执行主体,可以是用于执行该方法的服务器或服务器上运行的软件系统;或者,也可以是用于接收并分析劫持日志以及静态资源文件的服务端,等。
为便于描述本申请实施例1,以下详细说明均以该静态资源文件的检测方法的执行主体为用于执行该方法的服务器或服务器上运行的软件系统(以下简称为检测系统)为例,对该静态资源文件的检测方法进行介绍。
请参见说明书附图1,图1为本发明实施例1提供的一种静态资源文件的检测方法的流程示意图,该流程具体包括如下步骤:
步骤11:当第一静态资源文件未通过完整性校验时,通过网络地址重新下载所述第一静态资源文件。
本发明实施例中,所述静态资源,是指JavaScript脚本。
本发明实施例中,所述第一静态资源文件,是指浏览器第一次加载的JavaScript脚本文件。
本发明实施例中,在一种实施方式中,所述第一静态资源文件未通过完整性校验,具体包括:浏览器加载用户指定的某个JavaScript脚本文件时,浏览器会使用SRI技术对该JavaScript脚本文件进行完整性校验,如果校验结果为不完整,则表征该JavaScript脚本文件未通过完整性校验。
本发明实施例中,所述SRI(子资源完整性,Subresource Integrity)技术,是允许浏览器检查其获得的资源(例如从CDN获得的)是否被篡改的一项安全特性。
其中,SRI技术通过验证获取的资源文件的hash(哈希)值是否和初始资源提供的哈希值一样,来判断资源是否被篡改。
具体地,如果获取的资源文件的哈希值和初始资源提供的哈希值一样,则说明完整性校验通过,即判定资源未被篡改,那么,浏览器就会正常加载该资源并执行该资源对应的功能;如果获取的资源文件的哈希值和初始资源提供的哈希值不一样,则说明完整性校验未通过,即判定资源被篡改,那么,浏览器会拒绝执行该资源。
本发明实施例中,预先在浏览器的网页端对浏览器的script标签进行了SRI校验的部署以及onerror事件的配置。当第一静态资源文件未通过完整性校验时,便会触发预先配置的onerror事件。
本发明实施例中,所述onerror事件属于JavaScript中的事件之一。只要JavaScript的网页页面中出现脚本错误,就会产生onerror事件。
其中,如果需要利用onerror事件,就必须创建一个用于处理错误的函数(onerrorhandle函数)。onerror handle函数中包含三个参数,具体为:msg(错误消息)、url(发生错误的页面的url)、line(发生错误的代码行),调用该onerror handle函数的表达式为:onerror=handleErrfunction handleErr(msg,url,l)。
本发明实施例中,当第一静态资源文件未通过完整性校验,触发onerror事件的onerror handle函数时,会对该第一静态资源文件进行一个回调,在这个回调过程中会对第一次校验未通过的第一静态资源文件进行两次fetch(取物)加载。
本发明实施例中,所述fetch加载,是指只下载静态资源文件而不执行该静态资源文件。
本发明实施例中,所述通过网络地址重新下载所述第一静态资源文件,是第一次fetch加载过程。
本发明实施例中,所述网络地址,是指校验未通过的第一静态资源文件对应的完整网页地址,即上述用户指定的某个JavaScript脚本文件对应的完整网页地址。
本发明实施例中,所述重新下载的第一静态资源文件,是指本地缓存资源文件。
本发明实施例中,所述本地缓存资源文件,是指第一静态资源第一次加载时缓存在浏览器客户端的本地缓存资源文件。浏览器加载静态资源文件时本身会缓存资源,这是浏览器客户端本身的机制之一。
本发明实施例中,在一种实施方式中,所述通过网络地址重新下载所述第一静态资源文件,具体包括:
通过第一次fetch加载所述校验未通过的第一静态资源文件对应的完整网页地址,重新下载得到本地缓存资源文件。
需要说明的是,如果第一静态资源文件是被劫持的情况的话,那么,通过网络地址重新下载得到的本地缓存资源文件也会是被劫持的静态资源文件;如果是未被劫持的情况下,重新下载得到的本地缓存资源文件就是正常的静态资源文件,则说明第一静态资源文件未通过完整性校验是因为网络环境差等与静态资源文件被劫持无关的外界因素原因。因此,步骤11当第一静态资源文件未通过完整性校验时,通过网络地址重新下载所述第一静态资源文件是执行步骤13根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持的重要前提条件之一。
步骤12:在所述网络地址上加入时间戳参数,并通过加入时间戳参数后的网络地址下载第二静态资源文件。
本发明实施例中,所述时间戳(Timestamp),是指能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据,通常是一个字符序列,它用于唯一地标识某一刻的时间。
其中,时间戳使用数字签名技术产生一系列数据,签名的对象中包含了原始文件信息、签名参数、签名时间等数据信息。
本发明实施例中,所述时间戳参数用于穿透浏览器的本地缓存资源,直接访问远程的资源文件。
其中,所述穿透浏览器的本地缓存资源,是指,绕过本地缓存资源文件,而是直接根据时间戳参数的数值链接到远程的资源文件。
其中,所述远程的资源文件,是指最原始的资源文件,即没有经过任何篡改或攻击的资源文件。
需要说明的是,浏览器的本地缓存是以URL(Uniform Resource Locator,统一资源定位符,或网页地址)为key来作为缓存标记,如果在网页地址的基础上增加一个时间戳,就会改变URL地址。虽然两次URL地址发生了改变,但是在静态资源文件未被劫持的情况下,两次URL地址所包含的资源文件理应是一样的。
本发明实施例中,所述在网络地址上加入时间戳参数,访问到远程的资源文件,也是浏览器客户端本身的机制之一。
本发明实施例中,在一种实施方式中,所述在所述网络地址上加入时间戳参数,具体包括:
在上述校验未通过的第一静态资源文件对应的完整网页地址的基础上加入了时间戳参数。
本发明实施例中,所述通过加入时间戳参数后的网络地址下载第二静态资源文件,是第二次fetch加载过程。
本发明实施例中,所述第二静态资源文件,是指远程的静态资源文件。
本发明实施例中,在一种实施方式中,所述通过加入时间戳参数后的网络地址下载第二静态资源文件,具体包括:
通过第二次fetch加载所述加入了时间戳参数的上述校验未通过的第一静态资源文件对应的完整网页地址,下载得到远程的静态资源文件。
需要说明的是,静态资源文件未被劫持的情况下,下载得到的本地缓存资源文件和远程的静态资源文件的文件内容应该是一致的。因此,步骤12在所述网络地址上加入时间戳参数,并通过加入时间戳参数后的网络地址下载第二静态资源文件是执行步骤13根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持的重要前提条件之一。
步骤13:根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持。
本发明实施例中,在一种实施方式中,所述根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持,具体包括:
将重新下载的第一静态资源文件的内容长度与所述第二静态资源文件的内容长度进行对比;
根据对比结果,判断所述第一静态资源文件是否被劫持。
本发明实施例中,所述重新下载的第一静态资源文件的内容长度,是指第一次fetch加载得到的本地缓存资源文件的JavaScript源码长度。
本发明实施例中,所述第二静态资源文件的内容长度,是指第二次fetch加载得到的远程资源文件的JavaScript源码长度。
本发明实施例中,在一种实施方式中,所述根据对比结果,判断所述第一静态资源文件是否被劫持,具体包括:
若所述对比结果为内容长度不相等,也就是第一次fetch加载得到的本地缓存资源文件的JavaScript源码长度和第二次fetch加载得到的远程资源文件的Java源码长度不相等,说明完整性校验未通过是因为静态资源文件被劫持,因此,判断所述第一静态资源文件被劫持;
若所述对比结果为内容长度相等,也就是第一次fetch加载得到的本地缓存资源文件的JavaScript源码的长度和第二次fetch加载得到的远程资源文件的Java源码的长度相等,说明完整性校验未通过是因为网络环境差、静态资源文件本身不完整、浏览器页面包含其他安全校验规则等其它外界因素导致的,而不是因为静态资源文件被劫持,因此,判断所述第一静态资源文件未被劫持。
需要说明的是,基于以上对第一静态资源文件是否被劫持的判断过程的说明,本发明实施例中,如果没有上述静态资源文件是否被劫持的判断过程,检测系统就无法向服务端上报被劫持的日志,即第一静态资源文件是否被劫持的判断过程是一种日志收集的必要前提。
本发明实施例中,在一种实施方式中,当判断所述第一静态资源文件被劫持后,检测系统会向服务端发送劫持日志以及重新下载的第一静态资源文件,用于通过服务端对所述劫持日志以及重新下载的第一静态资源文件的分析,确定劫持事件的相关信息。
其中,所述服务端,是指日志上报服务器端。
本发明实施例中,在一种实施方式中,所述检测系统会向服务端发送劫持日志以及重新下载的第一静态资源文件,具体包括:
检测系统通过post(日志上报)方式,将劫持日志以及第一次fetch加载得到的本地缓存资源文件的文件内容,发送到服务端。
其中,所述日志上报,是指发送一个http请求到日志上报服务器端。
本发明实施例中,所述重新下载的第一静态资源文件的分析,具体包括:
通过收集第一次fetch加载得到的本地缓存资源文件的文件内容,进行分析。
本发明实施例中,在一种实施方式中,所述本地缓存资源文件的文件内容,具体包括:
本地缓存资源文件的内容长度(即JavaScript源码长度);和,
本地缓存资源文件的返回响应头;以及,
本地缓存资源文件的响应状态;等。
其中,所述本地缓存资源文件的返回响应头,是指包含有资源文件的一些服务器信息。
其中,所述本地缓存资源文件的响应状态,是指浏览器加载网络地址的成败或失败的两种响应状态。
本发明实施例中,在一种实施方式中,所述通过服务端对所述劫持日志以及重新下载的第一静态资源文件的分析,确定劫持事件的相关信息,具体包括:
通过收集所述劫持日志以及第一次fetch加载得到的本地缓存资源文件的文件内容,进行分析后,可以确定劫持事件的相关信息,从而还原劫持场景。
本发明实施例中,在一种实施方式中,所述劫持事件的相关信息,具体包括:
被劫持的静态资源文件发生的时间、网络、位置、运营商信息等。
本发明实施例中,在一种实施方式中,所述劫持场景,具体包括:
被劫持的用户分布情况和网络情况,以及客户端特征等。
需要说明的是,基于上述收集到的劫持日志以及重新下载的第一静态资源文件,检测系统就可以分析出当静态资源文件被劫持时,具体是发生在哪,什么时间发生的,是怎么被劫持的,以及具体劫持的对象。根据分析出的数据信息可以汇总出反劫持的操作或方法。
本发明实施例中,基于对上述劫持事件的相关信息的分析,可以汇总出静态资源文件被劫持的方式,从而可以进行对应的反劫持操作。
本发明实施例中,在一种实施方式中,当判断所述第一静态资源文件被劫持后,可以基于所述第二静态资源文件进行页面展示。
需要说明的是,如果静态资源文件未通过完整性校验时,浏览器拒绝执行该静态资源文件,会导致网页页面崩溃、不出现内容等错误。
本发明实施例中,所述基于所述第二静态资源文件进行页面展示,具体包括:
使用第二次fetch加载得到的远程资源文件进行页面加载,让网页页面恢复正常状态。
需要说明的是,由于基于所述第二静态资源文件进行页面展示,有较低的概率使得用户受到安全风险,因此,建议宁可页面出错,也不能使得用户受到安全风险。
采用本发明实施例1提供的方案,由于根据重新下载的第一静态资源文件与所述第二静态资源文件的对比来判断所述第一静态资源文件是否被劫持,当判断所述第一静态资源文件被劫持,进而可以准确判断出静态资源文件是因为被劫持而导致静态资源文件完整性校验的校验结果为不完整,从而判定静态资源文件被篡改。因此,采用本发明实施例所提供的方法,根据重新下载的第一静态资源文件与所述第二静态资源文件的对比来判断所述第一静态资源文件是否被劫持,可以解决现有技术中通过静态资源文件完整性校验来判定静态资源文件是否被篡改的方式,通常判定结果不准确的问题。
实施例2
为解决现有技术中通过静态资源文件完整性校验来判定静态资源文件是否被篡改的方式,通常判定结果不准确的问题,本发明实施例2中提供了一种静态资源文件的检测装置20。
请参见说明书附图2,图2为本发明实施例2所提供的一种静态资源文件的检测装置的结构示意图。
该装置具体包括如下单元:第一静态资源下载单元21,第二静态资源下载单元22,静态资源劫持判断单元23。
以下具体介绍下各单元的功能:
第一静态资源下载单元,用于当第一静态资源文件未通过完整性校验时,通过网络地址重新下载所述第一静态资源文件;
第二静态资源下载单元,用于在所述网络地址上加入时间戳参数,并通过加入时间戳参数后的网络地址下载第二静态资源文件;
静态资源劫持判断单元,用于根据重新下载的第一静态资源文件与所述第二静态资源文件的对比,判断所述第一静态资源文件是否被劫持。
本发明实施例2中,所述静态资源劫持判断单元,具体包括:
对比子单元,用于将重新下载的第一静态资源文件的内容长度与所述第二静态资源文件的内容长度进行对比;
判断子单元,用于根据对比结果,判断所述第一静态资源文件是否被劫持。
本发明实施例2中,所述判断子单元,具体用于:
若所述对比结果为内容长度不相等,则判定所述第一静态资源文件被劫持;
若所述对比结果为内容长度相等,则判定所述第一静态资源文件未被劫持。
本发明实施例2中,当判断所述第一静态资源文件被劫持后,所述装置还包括:
向服务端发送劫持日志以及重新下载的第一静态资源文件,用于通过服务端对所述劫持日志以及重新下载的第一静态资源文件的分析,确定劫持事件的相关信息。
本发明实施例2中,当判断所述第一静态资源文件被劫持后,所述装置还包括:
基于所述第二静态资源文件进行页面展示。
本发明实施例2中,所述装置还包括:
通过SRI技术对所述第一静态资源文件进行完整性校验。
采用本发明实施例2提供的方案,由于根据重新下载的第一静态资源文件与所述第二静态资源文件的对比来判断所述第一静态资源文件是否被劫持,当判断所述第一静态资源文件被劫持,进而可以准确判断出静态资源文件是因为被劫持而导致静态资源文件完整性校验的校验结果为不完整,从而判定静态资源文件被篡改。因此,采用本发明实施例所提供的方法,根据重新下载的第一静态资源文件与所述第二静态资源文件的对比来判断所述第一静态资源文件是否被劫持,可以解决现有技术中通过静态资源文件完整性校验来判定静态资源文件是否被篡改的方式,通常判定结果不准确的问题。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。