一种针对跨站脚本攻击的防御方法及装置与流程

文档序号:22834183发布日期:2020-11-06 16:25阅读:158来源:国知局
一种针对跨站脚本攻击的防御方法及装置与流程

本申请涉及信息安全技术领域,特别涉及一种针对跨站脚本攻击的防御方法及装置。



背景技术:

针对跨站脚本攻击(即xss),现阶段大部分的网站一般采用以下三个步骤进行过滤和防御:前端过滤—>nginx过滤—>后端过滤。

但是,前端过滤xss、nginx过滤及后端过滤,均可以被攻击者绕过,对网站信息的泄露造成威胁。因此,目前亟需一种防御方法,来增强对跨站脚本攻击的防御。



技术实现要素:

为解决上述技术问题,本申请实施例提供一种针对跨站脚本攻击的防御方法及装置,以达到增强防御的目的,技术方案如下:

一种针对跨站脚本攻击的防御方法,包括:

获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息;

检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码;

若存在,则对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码;

按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

所述按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数之后,还包括:

获取所述植入所述劫持代码的javascript内置函数,并检测所述植入所述劫持代码的javascript内置函数是否已被攻击者还原为所述javascript内置函数;

若是,则对所述植入所述劫持代码的javascript内置函数进行劫持,将所述植入所述劫持代码的javascript内置函数中的恶意代码删除,并再次植入劫持代码;

按照所述javascript内置函数的原生格式,向浏览器反馈再次植入所述劫持代码的javascript内置函数。

所述方法还包括:

从所述后端需要反馈给浏览器的信息中获取第三方js引用url,并将所述第三方js引用url与预先设定的安全url名单中的url进行枚举正则匹配;

将所述第三方js引用url中,与所述预先设定的安全url名单中的url不匹配的url,作为异常url;

基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码,并判断所述源代码是否为javascript代码;

若是,过滤掉所述源代码。

所述判断所述源代码是否为javascript代码,包括:

判断所述源代码中是否存在多个不同设定类型的关键字。

所述基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码,包括:

调用ajax函数,将所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url作为参数传递给后端接收函数;

所述后端接收函数以代理的方式对接收到的url进行解码,并使用curl访问解码后的url以获取源代码,将所述源代码反馈给所述ajax函数。

所述方法还包括:

将所述javascript内置函数发送至后端数据库,以使所述后端数据库进行存储报警。

所述方法还包括:

将所述异常url及所述源代码发送至后端数据库,以使所述后端数据库进行存储报警。

一种针对跨站脚本攻击的防御装置,包括:

第一获取模块,用于获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息;

第一检测模块,用于检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码;

第一劫持模块,用于若所述后端需要反馈给浏览器的信息中存在攻击者劫持javascript内置函数的代码,则对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码;

第一反馈模块,用于按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

所述装置还包括:

第二获取模块,用于获取所述植入所述劫持代码的javascript内置函数,并检测所述植入所述劫持代码的javascript内置函数是否已被攻击者还原为所述javascript内置函数;

第二劫持模块,用于若所述植入所述劫持代码的javascript内置函数已被攻击者还原为所述javascript内置函数,则对所述植入所述劫持代码的javascript内置函数进行劫持,将所述植入所述劫持代码的javascript内置函数中的恶意代码删除,并再次植入劫持代码;

第二反馈模块,用于按照所述javascript内置函数的原生格式,向浏览器反馈再次植入所述劫持代码的javascript内置函数。

所述装置还包括:

匹配模块,用于从所述后端需要反馈给浏览器的信息中获取第三方js引用url,并将所述第三方js引用url与预先设定的安全url名单中的url进行枚举正则匹配;

第一确定模块,用于将所述第三方js引用url中,与所述预先设定的安全url名单中的url不匹配的url,作为异常url;

第三获取模块,用于基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码;

判断模块,用于判断所述源代码是否为javascript代码;

过滤模块,用于若所述源代码为javascript代码,则过滤掉所述源代码。

所述判断模块,具体用于判断所述源代码中是否存在多个不同设定类型的关键字。

所述第三获取模块,具体用于:

调用ajax函数,将所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url作为参数传递给后端接收函数;

所述后端接收函数以代理的方式对接收到的url进行解码,并使用curl访问解码后的url以获取源代码,将所述源代码反馈给所述ajax函数。

所述装置还包括:

第一存储模块,用于将所述javascript内置函数发送至后端数据库,以使所述后端数据库进行存储报警。

所述装置还包括:

第二存储模块,用于将所述异常url及所述源代码发送至后端数据库,以使所述后端数据库进行存储报警。

与现有技术相比,本申请的有益效果为:

在本申请中,通过获取对浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息,在该信息中存在攻击者劫持javascript内置函数的代码时,对javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码,增强对跨站脚本攻击的防御。并且,在植入劫持代码之后,按照javascript内置函数的原生格式,向浏览器反馈植入劫持代码的javascript内置函数,降低攻击者发现javascript内置函数被劫持的概率,避免攻击者绕开劫持,进一步增强防御。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本申请提供的一种针对跨站脚本攻击的防御方法实施例1的流程图;

图2是本申请提供的一种针对跨站脚本攻击的防御方法实施例2的流程图;

图3是本申请提供的一种针对跨站脚本攻击的防御方法实施例3的流程图;

图4是本申请提供的一种针对跨站脚本攻击的防御方法实施例4的流程图;

图5是本申请提供的一种针对跨站脚本攻击的防御方法实施例5的流程图;

图6是本申请提供的一种针对跨站脚本攻击的防御装置的逻辑结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参照图1,为本申请实施例1提供的一种针对跨站脚本攻击的防御方法的流程图,如图1所示,该方法可以包括但并不局限于以下步骤:

步骤s11、获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息。

本实施例中,对浏览器中信息进行前端过滤、nginx过滤及后端过滤的过程可以参见现有技术中相关过程,在此不再赘述。

步骤s12、检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码。

若存在,则执行步骤s13。

由于包含攻击代码的javascript内置函数,是不会向外公开里面的实现方法,所以javascript内置函数返回函数的时候,一般是functionproc(){[nativecode]}类型,因此,本实施例中,可以通过检测后端需要反馈给浏览器的信息中,是否存在包含[nativecode]字符串的函数,来检测是否存在攻击者劫持javascript内置函数的代码。

如果后端需要反馈给浏览器的信息中,存在包含[nativecode]字符串的函数,则说明其中包含攻击者劫持javascript内置函数的代码。

步骤s13、对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码。

对所述javascript内置函数进行劫持,并javascript内置函数中的恶意代码删除,并植入劫持代码,能避免javascript内置函数对网站进行攻击。

步骤s14、按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

javascript内置函数的原生格式,可以理解为:最初封装javascript内置函数所采用的格式。

按照javascript内置函数的原生格式,向浏览器反馈植入劫持代码的javascript内置函数,能使攻击者不易发现javascript内置函数已经被劫持,从而避免植入劫持代码的javascript内置函数失效,以增强防御。

在本申请中,通过获取对浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息,在该信息中存在攻击者劫持javascript内置函数的代码时,对javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码,增强对跨站脚本攻击的防御。并且,在植入劫持代码之后,按照javascript内置函数的原生格式,向浏览器反馈植入劫持代码的javascript内置函数,降低攻击者发现javascript内置函数被劫持的概率,避免攻击者绕开劫持,进一步增强防御。

作为本申请另一可选实施例,参照图2,为本申请提供的一种针对跨站脚本攻击的防御方法实施例2的流程图,本实施例主要是对上述实施例1描述的针对跨站脚本攻击的防御方法的扩展方案,如图2所示,该方法可以包括但并不局限于以下步骤:

步骤s21、获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息;

步骤s22、检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码;

若存在,则执行步骤s23。

步骤s23、对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码。

步骤s24、按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

步骤s21-s24的详细过程可以参见实施例1中步骤s11-s14的相关介绍,在此不再赘述。

步骤s25、获取所述植入所述劫持代码的javascript内置函数,并检测所述植入所述劫持代码的javascript内置函数是否已被攻击者还原为所述javascript内置函数。

若是,则执行步骤s26。

在将植入劫持代码的javascript内置函数向浏览器反馈之后,可能会被攻击者执行反劫持操作,即将植入劫持代码的javascript内置函数还原为javascript内置函数,因此为了避免被攻击,需要检测植入劫持代码的javascript内置函数是否已被攻击者还原为javascript内置函数。

检测植入劫持代码的javascript内置函数是否已被攻击者还原为javascript内置函数,可以包括但不局限于:

检测植入劫持代码的javascript内置函数的长度是否未超过设定长度,且植入劫持代码的javascript内置函数中是否含有[nativecode]字符串。

若植入劫持代码的javascript内置函数的长度未超过设定长度,且植入劫持代码的javascript内置函数中含有[nativecode]字符串字符串,则说明植入劫持代码的javascript内置函数已被还原为原生javascript函数。

设定长度可以设置为但不局限于:40字节。

步骤s26、对所述植入所述劫持代码的javascript内置函数进行劫持,将所述植入所述劫持代码的javascript内置函数中的恶意代码删除,并再次植入劫持代码。

步骤s27、按照所述javascript内置函数的原生格式,向浏览器反馈再次植入所述劫持代码的javascript内置函数。

本实施例中,对所述植入所述劫持代码的javascript内置函数进行劫持,将所述植入所述劫持代码的javascript内置函数中的恶意代码删除,并再次植入劫持代码,并按照所述javascript内置函数的原生格式,向浏览器反馈再次植入所述劫持代码的javascript内置函数,实现对攻击者反劫持的操作进行防御,进一步增强防御。

作为本申请另一可选实施例,参照图3,为本申请提供的一种针对跨站脚本攻击的防御方法实施例3的流程图,本实施例主要是对上述实施例1描述的针对跨站脚本攻击的防御方法的扩展方案,如图3所示,该方法可以包括但并不局限于以下步骤:

步骤s31、获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息;

步骤s32、检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码;

若存在,则执行步骤s33。

步骤s33、对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码。

步骤s34、按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

步骤s31-s34的详细过程可以参见实施例1中步骤s11-s14的相关介绍,在此不再赘述。

步骤s35、将所述javascript内置函数发送至后端数据库,以使所述后端数据库进行存储报警。

在本实施例中,将javascript内置函数发送至后端数据库,以使后端数据库进程存储报警,可以实现在不让攻击者警觉的前提下,通过报警机制进行防御。

作为本申请另一可选实施例,参照图4,为本申请提供的一种针对跨站脚本攻击的防御方法实施例4的流程图,本实施例主要是对上述实施例1描述的针对跨站脚本攻击的防御方法的扩展方案,如图4所示,该方法可以包括但并不局限于以下步骤:

步骤s41、获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息;

步骤s42、检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码;

若存在,则执行步骤s43。

步骤s43、对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码。

步骤s44、按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

步骤s41-s44的详细过程可以参见实施例1中步骤s11-s14的相关介绍,在此不再赘述。

步骤s45、从所述后端需要反馈给浏览器的信息中获取第三方js引用url,并将所述第三方js引用url与预先设定的安全url名单中的url进行枚举正则匹配。

预先设定的安全url名单中的url可以理解为:通过安全验证的,非恶意的url。

第三方js可以理解为:从外部引用的js。例如,在网站中需要使用百度的数据统计功能时,网站调用百度的某个js即第三方js。

步骤s46、将所述第三方js引用url中,与所述预先设定的安全url名单中的url不匹配的url,作为异常url。

本实施例中,可以将异常url删除,或者将异常url设置为不可用,以避免网站被攻击。

步骤s47、基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码,并判断所述源代码是否为javascript代码。

虽然第三方js引用url中,与预先设定的安全url名单中的url匹配的url,可以认为是安全url,但是,为了保证防御的可靠性,可以进一步基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码,并判断源代码是否为javascript代码。

若是,则说明源代码为恶意代码,则执行步骤s38。

本实施例中,判断所述源代码是否为javascript代码,可以包括但不局限于:

判断所述源代码中是否存在多个不同设定类型的关键字。

设定类型可以根据需要进行设置,在本实施例中不做限制。例如,可以为:function、//、/*、var、let、alert、confirm或prompt。

通过判断源代码中是否存在多个不同设定类型的关键字,可以降低误报的概率,提高判断的准确性。

基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码,可以包括:

s471、调用ajax函数,将所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url作为参数传递给后端接收函数;

s472、所述后端接收函数以代理的方式对接收到的url进行解码,并使用curl访问解码后的url以获取源代码,将所述源代码反馈给所述ajax函数。

步骤s48、过滤掉所述源代码。

本实施例中,在对原生javascript代码进行劫持的同时,进行url的匹配,发现异常url,及过滤源代码,实现从多个方面对跨站脚本攻击进行防御,增强防御。

作为本申请另一可选实施例,参照图5,为本申请提供的一种针对跨站脚本攻击的防御方法实施例5的流程图,本实施例主要是对上述实施例4描述的针对跨站脚本攻击的防御方法的扩展方案,如图5所示,该方法可以包括但并不局限于以下步骤:

步骤s51、获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息;

步骤s52、检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码;

若存在,则执行步骤s53。

步骤s53、对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码。

步骤s54、按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

步骤s55、从所述后端需要反馈给浏览器的信息中获取第三方js引用url,并将所述第三方js引用url与预先设定的安全url名单中的url进行枚举正则匹配。

步骤s56、将所述第三方js引用url中,与所述预先设定的安全url名单中的url不匹配的url,作为异常url。

步骤s57、基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码,并判断所述源代码是否为javascript代码。

若是,则说明源代码为恶意代码,则执行步骤s58。

步骤s58、过滤掉所述源代码。

步骤s51-s58的详细过程可以参见实施例1中步骤s41-s48的相关介绍,在此不再赘述。

步骤s59、将所述异常url及所述源代码发送至后端数据库,以使所述后端数据库进行存储报警。

本实施例中,将所述异常url及所述源代码发送至后端数据库,以使所述后端数据库进行存储报警,可以实现在不让攻击者警觉的前提下,通过报警机制进行防御。

接下来对本申请提供的一种针对跨站脚本攻击的防御装置进行介绍,下文介绍的针对跨站脚本攻击的防御装置与上文介绍的针对跨站脚本攻击的防御方法可相互对应参照。

请参见图6,针对跨站脚本攻击的防御装置包括:第一获取模块100、第一检测模块200、第一劫持模块300和第一反馈模块400。

第一获取模块100,用于获取后端需要反馈给浏览器的信息,所述后端需要反馈给浏览器的信息为对所述浏览器中信息进行前端过滤、nginx过滤及后端过滤后得到的信息;

第一检测模块200,用于检测所述后端需要反馈给浏览器的信息中是否存在攻击者劫持javascript内置函数的代码;

第一劫持模块300,用于若所述后端需要反馈给浏览器的信息中存在攻击者劫持javascript内置函数的代码,则对所述javascript内置函数进行劫持,将所述javascript内置函数中的恶意代码删除,并植入劫持代码;

第一反馈模块400,用于按照所述javascript内置函数的原生格式,向浏览器反馈植入所述劫持代码的javascript内置函数。

上述针对跨站脚本攻击的防御装置,还可以包括:

第二获取模块,用于获取所述植入所述劫持代码的javascript内置函数,并检测所述植入所述劫持代码的javascript内置函数是否已被攻击者还原为所述javascript内置函数;

第二劫持模块,用于若所述植入所述劫持代码的javascript内置函数已被攻击者还原为所述javascript内置函数,则对所述植入所述劫持代码的javascript内置函数进行劫持,将所述植入所述劫持代码的javascript内置函数中的恶意代码删除,并再次植入劫持代码;

第二反馈模块,用于按照所述javascript内置函数的原生格式,向浏览器反馈再次植入所述劫持代码的javascript内置函数。

本实施例中,上述针对跨站脚本攻击的防御装置,还可以包括:

匹配模块,用于从所述后端需要反馈给浏览器的信息中获取第三方js引用url,并将所述第三方js引用url与预先设定的安全url名单中的url进行枚举正则匹配;

第一确定模块,用于将所述第三方js引用url中,与所述预先设定的安全url名单中的url不匹配的url,作为异常url;

第三获取模块,用于基于所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url,获取源代码;

判断模块,用于判断所述源代码是否为javascript代码;

过滤模块,用于若所述源代码为javascript代码,则过滤掉所述源代码。

本实施例中,所述判断模块,具体可以用于判断所述源代码中是否存在多个不同设定类型的关键字。

本实施例中,所述第三获取模块,具体可以用于:

调用ajax函数,将所述第三方js引用url中,与所述预先设定的安全url名单中的url匹配的url作为参数传递给后端接收函数;

所述后端接收函数以代理的方式对接收到的url进行解码,并使用curl访问解码后的url以获取源代码,将所述源代码反馈给所述ajax函数。

本实施例中,上述针对跨站脚本攻击的防御装置,还可以包括:

第一存储模块,用于将所述javascript内置函数发送至后端数据库,以使所述后端数据库进行存储报警。

本实施例中,上述针对跨站脚本攻击的防御装置,还可以包括:

第二存储模块,用于将所述异常url及所述源代码发送至后端数据库,以使所述后端数据库进行存储报警。

需要说明的是,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。

以上对本申请所提供的一种针对跨站脚本攻击的防御方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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