基于静态分析和动态运行的Web应用JavaScript代码原子性违反检测的制作方法_4

文档序号:9375480阅读:来源:国知局
按钮,用户的注册表单变为弹出窗口,用户填写完基本的用户信息后,提交 按钮,发送请求JS获取表单的内容,进行简单的识别后,将其封装成JSON格式,采用Ajax 发送给特定的网站服务器,等待回应;网站服务器获取请求后,将用户信息写入数据库中, 然后返回给客户端结果;客户端接收到结果后,调用相应的回调函数,执行操作;若用户正 确注册,HTML页面显示该用户已登录,否则返回错误报告。
[0096] 对该应用进行原子性违反检测的具体过程如下:
[0097] 1、代码分析筛选出执行路径。
[0098] 由于这里已经指定是注册表单提交的检测,因此只需将条件局限在表单提交的执 行路径中,选用含有该流程的执行路径来进行后续分析。
[0099] 2、生成判定规则。
[0100] 按发明提出的方案,将整个过程分为表单填写、Ajax提交、回调执行三个模块,对 应模块需要记录的元素分别为:
[0101] 页面元素包括:注册按钮idbuttonld、表单formld、表单显示状态form, display、 用户显示域iduserTextld、用户注册的信息user, info ;
[0102] 脚本元素包括:表单提交方法asynSubmit、Ajax提交内容asynSendData、提交服 务器地址targetUrl ;
[0103] 回调执行元素包括:回调方法callback、回调数据callBackData、回调中涉及到 页面元素的操作cal IBackOper。
[0104] 3、JS代码插粧
[0105] 通过在asynSubmit和callBack函数中放置探测点来对JS代码进行插粧,再通过 路径的执行获取相应运行轨迹,并提取运行轨迹中对应的记录元素。
[0106] 4、根据记录的元素将设计的原子性违反规则表示出来。
[0107] 判定条件1 :用户表单一次只能提交一次:
[0108] buttonld. asynCallList. isContain(asynSubmit);
[0109] 判定条件2 :返回的结果显示的html域不能调用其它异步调用:
[0110] buttonld. callBackOperList. isContain(userTextld);
[0111] 判定条件3 :Ajax提交的数据时点击时最后修改的内容:
[0112] buttonld. asynSendData. isContain (user, info);
[0113] 判定条件4 :表单提交操作是否与用户显示域回调函数有交叉:
[0114] buttonld. asynSubmit. islnterffith(userTextld. callBackOper);
[0115] 判定条件5 :表单调用函数是否与回调函数有交叉操作:
[0116] asynCallFunList. islnterffith(callBackOper)〇
[0117] 5、将判定条件和记录的元素作为输入,按模块将各元素进行判定条件的对比,最 终得出该流程原子性违反的判定结果,输出。
[0118] 动态分析脚本具体如下表示:
[0119] 传递参数包括pageElements和JSElements,依次获取具体的操作元素,如 buttonld ;定义返回值,result (初始为true)和errNum ;将得到判定条件依次作为原子 性违反的判断函数,标记result和errNum ;最后返回检测结果{result :result,errNum : errNum}〇
[0120]
[0121]
[0122] 例如,当实例得出的检测结果为result = false、errNum = 3,表示当上一次提交 表单还没有返回结果时,若修改表单再次提交请求,两次数据不一致,则发生原子性违反。
[0123] 总之,本发明利用静态元素记录和动态插粧分析技术对Web应用执行轨迹进行分 析,构建反映特定模块需求的元素记录和规则设计,并结合起来生成原子性违反判定条件, 最终检测原子性违反的问题。相比于传统的原子性违反检测方法,本发明不仅针对性强,目 标更明确细致化,最后的检测更具有全面、高效性。
【主权项】
1. 基于静态分析和动态运行的Web应用JavaScript (简称JS)代码原子性违反检测方 法,其特征是:静态分析JS代码,获取JS中涉及到异步调用的函数和方法,保证代码上的覆 盖;跨语言平台的动态插粧记录机制,在异步调用函数中设置探测点,不仅能得到JS程序 中的元素,还能记录HTML代码中的元素,提高检测潜在原子性违反的准确率;根据Web应用 请求到回应整个过程中涉及的元素,设计原子性违反判定规则,进而开展有效的原子性违 反检测。2. 根据权利要求1所述的基于静态分析和动态运行的Web应用JS代码原子性违反检 测方法,其特征是包括以下步骤: 1) 静态分析JS代码,记录涉及异步调用的元素类型; 2) 异步调用操作抽象化,划分模块,设计原子性违反的判定规则; 3. JS代码插粧,设置函数探测点; 4) 动态运行Web应用,获取运行轨迹,生成判定条件,; 5) 结合运行轨迹中的记录元素,编写分析脚本,得到原子性违反检测结果。3. 根据权利要求2所述的基于静态分析和动态运行的Web应用JS代码原子性违反检 测方法,其特征是步骤1)中,根据MVC(Model View Controller,模型视图控制器)体系和 JS前端框架请求事件机制,采用静态方法分析Web应用中JS代码,记录异步调用操作涉及 到的元素,包括函数名、方法名、调用中传递的参数及回调函数中的语句,以便后续对运行 轨迹进行筛选。4. 根据权利要求2所述的基于静态分析和动态运行的Web应用JS代码原子性违反检 测方法,其特征是步骤2)中,根据Web应用中整体流程情况,利用JS_WALA工具生成一个应 用的异步调用关系图;然后,将关系图划分为各个关系块图,每个图定义为一个原子性操作 模式,根据各个原子性操作模式具体内容的不同,设计出原子性违反判定的基本规则: 规则1 :同一个事件源在异步调用了某一个函数时,若回调函数还没有被调用或还没 有执行相应的操作,该事件源就调用了另一个异步调用; 规则2 :两个异步调用含有对某一个全局变量操作或有类似发送数据函数体被不同数 据源同时调用; 规则3 :目标对象处理请求过程中,还没有返回相应结果时,其它事件源对相同目标对 象发出类似的异步调用; 规则4 :当一个异步调用中回调函数的操作涉及某一个事件源,而在相应操作实施前, 涉及的事件源有了其它异步调用; 规则5 :多个回调函数中的回调操作中均涉及对同一个事件源的操作。5. 根据权利要求2所述的基于静态分析和动态运行的Web应用JS代码原子性违反 检测方法,其特征是步骤3)中,依据静态分析记录的元素,对源代码进行插粧;代码的插粧 主要集中于函数间的调用,为了减少开销、保证插粧的效率,把探测点放置在函数第一条执 行语句前面;当程序运行到探测点时,会进入插粧的记录函数中,既可以记录函数内执行路 径,也可以探测函数间调用的顺序。6. 根据权利要求2所述的基于静态分析和动态运行的Web应用JS代码原子性违反检 测方法,其特征是步骤4)中,设置满足需求的影子值,依托插粧工具Jalangi对JS代码进 行插粧;影子值设置为对象类型和函数间调用的符号化表示,保证插粧能获取异步调用中 具体的函数执行顺序和回调操作;依据原子性违反判定规则,将涉及异步调用操作的元素 信息转换成判定条件,以检测Web应用中的原子性违反。7.根据权利要求2所述的基于静态分析和动态运行的Web应用JS代码原子性违反检 测方法,其特征是步骤5)具体包括:运行Web应用得到相应的运行轨迹,获取运行轨迹中涉 及异步调用操作的元素信息,使用这些信息将原子性违反判定规则转换成判定条件;依据 这些判定条件,编写动态原子性违反分析的脚本,集成到Jalangi的第三方脚本分析库中; Jalangi在回放阶段会自动调用并执行脚本进行分析,在控制台中输出原子性违反的判定 结果,true表示没有原子性违反,false则含有原子性违反。
【专利摘要】本发明为一种基于静态分析和动态运行的原子性违反检测方法:先通过静态分析JS代码,获取JS中涉及到异步调用的函数和方法,保证代码上的覆盖;跨语言平台的动态插桩记录机制,在异步调用函数中设置探测点,不仅能得到JS程序中的元素,还能记录HTML代码中的元素,提高检测潜在原子性违反的准确率;根据Web应用请求到回应整个过程中涉及的相关元素,设计原子性违反判定规则,从而能够开展有效的原子性违反检测。
【IPC分类】G06F11/36
【公开号】CN105095092
【申请号】CN201510626506
【发明人】许蕾, 王德智, 李言辉, 徐宝文
【申请人】南京大学
【公开日】2015年11月25日
【申请日】2015年9月25日
当前第4页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1