本发明属于计算机技术领域,涉及利用微扰法的客户端动态URL相关脚本字符串检测系统及其方法。
背景技术:
URL,统一资源定位符,唯一的标识万维网上的某个资源。通常,表示资源位置的URL是维持不变的,这极大地方便了黑客们对系统发起攻击,因为攻击目标的地址始终不变,其中的攻击如CSRF攻击,XSS注入攻击等。近年来XSS,目录遍历,CSRF,SQL攻击对网络安全的影响非常严重,而这些攻击都是基于URL。为此,中国专利CN106657044A提出了一种用于提高网站系统安全防御的网页地址跳变方法,该技术能够有效提高网站系统得防护能力。但一些网站应用系统中会由客户端浏览器引擎生成一些动态URL,上述专利所提出的技术无法对这些URL进行跳变。对于此类网站应用系统,中国专利CN106657044A所描述的方法会拦截这些客户端动态生成的URL,导致一些正常业务无法运行,即该专利所描述方法与会生成动态URL的客户端脚本存在兼容性问题。为了进一步提高网站系统的防护能力,解决客户端脚本的兼容性问题,本专利提出了一种利用微扰法的客户端动态URL相关脚本字符串检测系统,目的是找出在客户端浏览器引擎中生成的URL(如通过AJAX加载URL)与网页脚本源码中字符串的关系,以便在跳变过程能将这些字符串进行跳变,实现对客户端脚本动态生成URL的跳变,从而解决客户端脚本的兼容性问题。
术语定义
1、静态URL:请求返回的页面源码中存在的URL,如<ahref=”http://www.baidu.com/?q=123”>。
2、客户端动态URL:请求返回的页面源码和脚本经过浏览器脚本渲染后动态生成的URL,如通过ajax,请求服务器的某个地址,接收返回结果通过函数插入页面一些<a>标签,并设置其href属性。与服务器端动态生成URL和静态URL不同,客户端动态URL是浏览器引擎进行渲染后动态生成的。
3、无头浏览器引擎:即headless browser,是一种没有界面的浏览器引擎,其功能跟普通浏览器引擎基本一致,如JS渲染。最常见的无头浏览器有PhantomJS等。
4、测试URL:需要测试是否含有客户端动态URL的网页地址。
5、外部链接脚本:请求的测试页面中,对其他脚本文件通过链接载入。如在请求测试的页面中,存在<script src=’a.js’>,则a.js为外部链接脚本。
技术实现要素:
本发明利用用微扰法对客户端动态URL相关脚本字符串进行检测,具体解决方案是:(1)获取一个网页的页面源码,并判断该网页页面是否会在客户端经浏览器引擎生成客户端动态URL;(2)找出这些客户端动态URL;(3)找出该网页源码(脚本部分)中与这些客户端动态URL相关的字符串。
本发明系统包括设置在代理服务器上的URL关键字查找模块、脚本替换模块、URL地址替换模块,以及设置在客户端上的URL检查模块、URL存储模块,其中:
URL关键字查找模块,用于检测网页源码(脚本部分)中是否有客户端动态URL中含有的关键字,并返回检测到的关键字在网页源码中的位置信息。其中关键字包括路径名和文件名,如http://baidu.com/akey/bkey/index.html含有akey、bkey(路径名)和index.html(文件名)关键字。
URL地址替换模块,将服务器返回源码中所有静态URL替换为空,如将<a href=”/a.php”>替换为<a href=””>。
脚本替换模块,将URL关键字查找模块返回的位置信息指向的关键字替换成自定义的特殊字符串。
URL检查模块,用于判断对经无头浏览器引擎渲染过后的网页源码中是否存在的客户端动态URL以及对其进行如下操作,包括客户端动态URL提取,替换后的特殊字符串提取,替换后的特殊字符串分析,如<ahref=”/a/b/index.html”>中,URL为”/a/b/index.html”,关键字有a、b和index.html;其中替换后的特殊字符串分析是为了获取关键字在网页源码中的位置信息。
URL存储模块,用于对URL检查模块执行结果的存储,包括某网页页面是否含有客户端动态URL,以及该网页源码中特定客户端动态URL相关的字符串和字符串在客户动态URL中的位置信息。
本发明利用微扰法的客户端动态URL相关脚本字符串检测方法包括:代理服务器操作流程、客户端检测网页页面是否存在客户端动态URL流程、客户端检测网页源码中与客户端动态URL相关脚本字符串流程、客户端检测外部链接脚本中与客户端动态URL相关字符串流程。具体是:
代理服务器操作流程:
步骤1:代理服务器等待客户端发起的请求;
步骤2:代理服务器收到请求;
步骤3:代理服务器保存请求信息,包括POST与GET参数;
步骤4:代理服务器对WEB服务器发起请求并接收返回的数据;
步骤5:检查保存的请求信息中是否有初始化标志,如果有执行步骤6,否则执行步骤9;
步骤6:检查初始化标志是否为真,如果为真执行步骤7,否则执行步骤8;
步骤7:代理服务器利用URL地址替换模块把源码中的静态URL替换为空,接着执行步骤9;
步骤8:此步骤执行以下步骤:
步骤8.1:代理服务器利用URL地址替换模块把源码中的静态URL替换为空;
步骤8.2:判断客户端请求的文件名是否跟前面请求参数中的页面参数一致,如果一致执行步骤8.3,否则执行步骤8.4;
步骤8.3:此步骤执行以下步骤:
步骤8.3.1:代理服务器根据客户端无头浏览器引擎请求参数中的URL值,利用URL关键字查找模块与脚本替换模块执行查找与替换源码(脚本部分)中的关键字;
步骤8.3.2:代理服务器利用URL地址替换模块把源码中的静态URL替换为空,接下来执行步骤9;
步骤8.4:保存数据,接下来执行步骤9;
步骤9:返回数据给客户端的无头浏览器引擎。
步骤10:等待客户端再次发起的请求。
客户端检测网页页面是否存在客户端动态URL流程:
步骤1:客户端操作无头游览器引擎构建请求(POST或者GET),请求参数中带有初始化标志为真。
步骤2:客户端向代理服务器发起请求。
步骤3:客户端等待代理服务器的响应。
步骤4:客户端无头浏览器引擎接收代理服务器返回的数据,渲染页面。
步骤5:客户端利用客户端脚本中的URL检查模块分析渲染过后的页面,判断是否有客户端动态URL生成,并保存外部链接文件的文件名到相应集合中(这里假设为script_files集合)。
步骤6:结束分析,返回结果。
客户端检测网页源码中(脚本部分)与客户端动态URL相关脚本字符串流程:
步骤1:如果客户端检测网页页面是否存在客户端动态URL流程结束后判断结果为真,执行步骤2,否则执行步骤8。
步骤2:客户端利用URL检查模块把网页源码中(脚本部分)所有的客户端动态URL提取出来,存入相关集合(这里假设为urls集合)。
步骤3:客户端循环遍历urls集合保存的客户端动态URL,客户端在测试URL中添加参数以组建URL,包括页面参数为本页,url参数为当前循环迭代的urls集合中的某个客户端动态URL,初始化标志参数为否。
步骤4:通过客户端无头浏览器引擎向代理服务器发起对组建的URL的请求。
步骤5:等待代理服务器的响应。
步骤6:客户端无头浏览器引擎接收代理服务器返回的数据并渲染页面,利用URL检查模块对源码进行客户端动态URL提取、替换后的特殊字符串提取与分析,利用URL存储模块保存操作结果,包括客户端动态URL、替换后的特殊字符串分析过后的结果(客户端动态URL中的关键字在网页源码中的位置信息)。
步骤7:保存的urls集合是否循环遍历结束,如果为是则执行步骤8,否则执行步骤3。
步骤8:结束。
客户端检测外部链接脚本中与客户端动态URL相关字符串流程:
步骤1:如果客户端检测网页页面是否存在客户端动态URL流程结束后判断结果为真,执行步骤2,否则执行步骤8。
步骤2:客户端利用URL检查模块把所有的客户端动态URL提取出来,存入相关集合(这里假设为urls集合)。
步骤3:循环遍历的urls集合中的客户端动态URL与script_files集合中的外部链接文件名,客户端脚本在测试URL中添加参数以组建URL,包括设置页面参数为当前循环到的外部链接文件名、url参数为当前循环的客户端动态URL、初始化标志为否。
步骤4:客户端操作无头浏览器引擎,利用组建的URL对代理服务器发起请求。
步骤5:客户端等待代理服务器的响应。
步骤6:客户端无头浏览器引擎接收代理服务器返回的数据,渲染页面时会请求外部链接文件(如<script src=’http://www.baidu.com/a.js’>),再次发起对代理服务器的请求。
步骤7:客户端无头浏览器引擎接收代理服务器返回的数据并渲染页面,利用URL检查模块对源码进行客户端动态URL提取、替换后的特殊字符串提取与分析,并利用URL存储模块保存操作结果,包括客户端动态URL、替换后的特殊字符串分析过后的结果(客户端动态URL中的关键字在网页源码中的位置信息)。
步骤8:保存的urls集合与script_files集合是否都循环遍历结束。如果为真执行步骤9,否则执行步骤3。
步骤9:结束。
本发明有益效果如下:
该方法可以有效、快速地检测出网页页面中是否存在客户端动态URL,并进一步找出与客户端动态URL网页源码(脚本部分)的字符串的关系位置关系,并将其关系进行保存,可用于基于URL跳变的web主动防御系统,以便在跳变过程能将这些字符串进行跳变,实现对客户端脚本动态生成URL的跳变,从而解决客户端脚本的兼容性问题,在实现安全防御同时保障网站业务的正常运行。
附图说明
图1为系统架构图;
图2为各模块分布图;
图3为代理服务器运行流程;
图4为客户端检测网页页面是否存在客户端动态URL流程;
图5为客户端检测网页源码中(脚本部分)与客户端动态URL相关脚本字符串流程;
图6为客户端检测外部链接脚本中与客户端动态URL相关字符串流程。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例一,参见图1所示,一种利用微扰法的客户端动态URL相关脚本字符串检测方法,其系统由客户端(python语言实现)、代理服务器(python语言实现),web服务器构成。其中:
客户端,用于处理代理服务器处理后返回的源码,包括用无头浏览器引擎渲染页面、用脚本处理源码以及保存处理结果。
代理服务器,用于接收客户端的请求、处理web服务器返回的数据和返回修改后的web服务器返回的数据给客户端,包括替换和查找web服务器返回的源码数据。
web服务器,用于接收代理服务器的请求,并返回资源(源码,图片,音频等网络资源)。
实例二,参见图2所示,为各模块分布图,其中的模块也是用python语言实现。
客户端包括URL检查模块、URL存储模块。
代理服务器包括URL关键字查找模块、脚本替换模块、URL地址替换模块。实施例三,参见图3所示,为代理服务器运行流程,由python脚本构成。以下为具体步骤:
步骤1:python代理服务器等待客户端发起的请求。
步骤2:python代理服务器收到请求。
步骤3:python代理服务器保存请求信息,包括POST与GET参数。
步骤4:python代理服务器对WEB服务器发起请求并接收返回的数据。
步骤5:检查保存的请求信息中是否有初始化标志,如果有执行步骤6,否则执行步骤9。
步骤6:检查初始化标志是否为真,如果为真执行步骤7,否则执行步骤8。
步骤7:python代理服务器利用URL地址替换模块把源码中的静态URL替换为空,接着执行步骤9。
步骤8:此步骤执行以下步骤
步骤8.1:python代理服务器利用URL地址替换模块把源码中的静态URL替换为空。
步骤8.2:客户端请求的文件名是否跟前面请求参数中的页面参数一致,如果一致执行步骤8.3,否则执行步骤8.4。
步骤8.3:此步骤执行以下步骤
步骤8.3.1:python代理服务器根据客户端无头浏览器引擎请求参数中的URL值,利用URL关键字查找模块与脚本替换模块分别执行查找源码(脚本部分)中的关键字,并将关键字替换成自定义的特殊字符串。
步骤8.3.2:python代理服务器利用URL地址替换模块把源码中的静态URL替换为空,接下来执行步骤9。
步骤8.4:保存数据,接下来执行步骤9。
步骤9:返回数据给客户端的无头浏览器引擎。
步骤10:等待客户端再次发起的请求。
实施例四,参见图4所示,客户端检测网页页面是否存在客户端动态URL流程,步骤如下:
步骤1:python客户端操作无头游览器引擎构建请求(POST或者GET),请求参数中带有初始化标志为真。
步骤2:python客户端向python代理服务器发起请求。
步骤3:python客户端等待代理服务器的响应。
步骤4:python客户端无头浏览器引擎接收python代理服务器返回的数据,渲染页面。
步骤5:python客户端利用客户端脚本中的URL检查模块分析渲染过后的页面,判断是否有客户端动态URL生成,并保存外部链接文件的文件名到script_files列表中。
步骤6:结束分析,返回结果。
实施例五,参加图5所示,为客户端检测网页源码中(脚本部分)与客户端动态URL相关脚本字符串流程,步骤如下:
步骤1:如果python客户端检测网页页面是否存在客户端动态URL流程结束后判断结果为真,执行步骤2,否则执行步骤8。
步骤2:python客户端利用URL检查模块把网页源码中(脚本部分)所有的客户端动态URL提取出来,存入urls列表。
步骤3:python客户端循环遍历urls列表保存的客户端动态URL,在测试URL中设置页面参数为本页,url参数为当前循环迭代的urls列表中的某个客户端动态URL,初始化标志参数为否,以组建URL。
步骤4:通过客户端无头浏览器引擎向python代理服务器发起对组建的URL的请求。
步骤5:等待python代理服务器的响应。
步骤6:客户端无头浏览器引擎接收python代理服务器返回的数据并渲染页面,利用URL检查模块对源码进行客户端动态URL提取、替换后的特殊字符串提取与分析,利用URL存储模块保存操作结果,包括客户端动态URL、替换后的特殊字符串分析后的结果(客户端动态URL与源码中的脚本部分的位置关系)。
步骤7:保存的urls列表是否循环遍历结束,如果为是则执行步骤8,否则执行步骤3。
步骤8:结束。
实施例六,参加图6所示,为客户端检测外部链接脚本中与客户端动态URL相关字符串流程:
步骤1:如果python客户端检测网页页面是否存在客户端动态URL流程结束后判断结果为真,执行步骤2,否则执行步骤8。
步骤2:python客户端利用URL检查模块把所有的客户端动态URL提取出来,存入urls列表。
步骤3:循环遍历的urls列表中的客户端动态URL与script_files列表中的外部链接文件名,客户端脚本在测试URL中添加参数以组建URL,包括设置页面参数为当前循环到的外部链接文件名、url参数为当前循环的客户端动态URL、初始化标志为否。
步骤4:python客户端操作无头浏览器引擎,利用组建的URL对python代理服务器发起请求。
步骤5:python客户端等待代理服务器的响应。
步骤6:python客户端无头浏览器引擎接收python代理服务器返回的数据,渲染页面时请求外部文件,再次发起对python代理服务器的请求。
步骤7:客户端无头浏览器引擎接收python代理服务器返回的数据并渲染页面,利用URL检查模块对源码进行客户端动态URL提取、替换后的特殊字符串提取与分析,利用URL存储模块保存操作结果,包括客户端动态URL、替换后的特殊字符串分析后的结果。
步骤8:保存的urls列表与script_files列表是否都循环遍历结束。如果为真执行步骤9,否则执行步骤3。
步骤9:结束。
本发明并不局限于上述具体实施方式,本领域技术人员还可据此做出多种变化,但任何与本发明等同或者类似的变化都应涵盖在本发明权利要求的范围内。