当前位置: 首页 > 专利查询>南京大学专利>正文

一种PHP语言Web应用中不可信变量静态检测方法技术

技术编号:4046106 阅读:276 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种PHP语言Web应用中不可信变量静态检测方法,其步骤是:1)识别PHP?Web应用的所有入口文件;2)由入口文件出发,析取PHP代码,同时避开HTML代码的干扰,采用迭代方法整合所有相关的PHP文件和代码;3)以整合后的功能模块为单位,采用静态分析的方法识别其中的不可信变量;4)汇总所有模块的解析结果并生成报告,每一个不可信变量都记录其所属的PHP文件和具体位置。本发明专利技术相对现有技术实现简单,识别率较高,且具有良好的可扩展性,能有效解决现有方法在弱类型和无类型语言编写的Web应用中难以有效检测不可信变量的问题。

【技术实现步骤摘要】

本专利技术涉及Web应用中引发安全问题的不可信变量的静态检测,特别针对广泛用 于Web应用编程的PHP语言,通过析取PHP代码结构,采用静态分析的方法快速定位Web应 用中可能存在的不可信变量,有效解决弱类型和无类型语言编写的Web应用中不可信变量 难以检测的问题。
技术介绍
当今,人们越来越多的社会活动通过Web应用完成,如购物、理财、办公和即时通 讯等,这要求Web应用具有高可靠性和安全性。Web应用接收的输入数据将直接影响到系统 的可靠性和安全性。同来源于本地数据库和文件的输入数据相比,通过用户交互过程由用 户输入到Web应用系统中的数据尤其难以控制,容易引发安全性问题和Web应用故障。这 类用户输入数据称为不可信数据,而能够接收和携带不可信数据的变量,就是不可信变量。目前用于检测不可信变量的方法主要包括两大类基于HTTP协议的动态检测(简 称HTTP法),以及基于参数函数PF (ParameterFunction)的静态检测(简称PF法)。HTTP 法会在Web应用中加载一个模块,动态记录传送到服务器端的变量〈name,value〉对。HTTP 法与Web应用的实现无关;其缺点是该方法能够检测到的变量仅限于测试者访问到的变 量,如果一些潜藏的不可信变量在测试过程中没有使用,就会给系统留下安全隐患;而潜藏 的不可信变量会在不经意的设计和编程过程中出现,也有可能是系统预留的后门。Web应用中,PF函数用于获取变量的〈name,value〉对。PF法通过静态检测所有的 PF函数查找Web应用中存在的不可信变量。PF法不容易遗漏显式定义的不可信变量,如果 Web应用编程遵循所有变量采用显式定义的方式,PF法是有效的。但是目前大量的Web应 用中普遍存在一些“技巧”可以通过已有变量的值继续定义新的变量,PHP语言编写的Web 应用这种情况十分常见;这样处理可以使程序小巧且功能强大,但问题是如此处理新变量 等于绕过了 PF函数,从而使PF法失去检测效果。
技术实现思路
本专利技术的主要目的是针对PHP语言编写的Web应用中易引发安全问题的不可信变 量,提出一种通过析取PHP代码的模块结构,采用静态程序分析来识别功能模块中不可信 变量的方法,辅助Web应用开发和维护人员快速检测安全漏洞,该方法相对现有技术实现 简单,识别率较高,且具有良好的可扩展性,能有效解决现有方法在弱类型和无类型语言编 写的Web应用中难以有效检测不可信变量的问题。为实现上述目的,本专利技术采用如下的步骤1)识别PHPWeb应用的所有入口文件;2)由入口文件出发,析取PHP Web应用的每个功能模块的PHP代码,同时避开HTML 代码的干扰,通过代码中的包含(include/require)语句采用迭代方法整合所有相关的 PHP文件和代码;3)以整合后的每一个PHPWeb应用的功能模块为单位,采用静态分析的方法识别 其中的不可信变量;4)汇总所有模块的解析结果,每个模块的解析结果都是一个不可信变量的集合, 汇总时取各集合的并集并生成报告,报告中对每一个不可信变量都记录其所属的PHP文件 和文件中的具体位置。上述步骤1)的入口文件识别过程为从Web应用主目录开始,遍历目录下所有文 件项构成集合W ;针对W中的每一个文件项,如果文件项是目录(文件夹),则遍历该目录下 所有文件项并添加到集合W中;如果文件项是一个文件,且是PHP文件,则判定该文件是否 具有入口文件特征如果是入口文件则将其添加到入口文件集合中;否则忽略该文件。遍 历和识别所有文件项直到集合W为空,最后得到Web应用的入口文件集合。上述步骤2)的功能模块整合过程为针对一个入口文件f,首先获取其中的PHP 代码构成代码集Cf ;然后初始化文件集合I,用于记录已包含的文件;接下来获取代码集Cf 中的所有包含语句并组成集合S ;针对集合S中的每一条包含语句S,首先确定语句S中引 用的文件is ;如果引用的文件is没有出现在初始化文件集合I中,或者包含指令不是一次 包含,则读入文件is,析取其中的PHP代码,用以替换代码集Cf中包含语句s的出现位置;接 下来将文件is记录入集合初始化文件I,并将其PHP代码中可能出现的包含语句再添加到 集合S中;如果语句s是一次包含,且文件is已在初始化文件集合I中,则语句s被忽略, 代码集Cf中对应位置替换为空串;按此循环直到集合S中所有的包含语句都被处理且不再 有新的包含语句加入;处理完毕后得到整合后的代码集Cf代表一个完整的功能模块。上述步骤3的不可信变量的识别过程为首先将所有变量归为三种类型类变量 (class_var)、已定义变量(def ined_var)、以及不可信变量(untrusted_var),然后基于整 合后的每一个PHP Web应用的功能模块,每次析取代码集Cf中的三个词,根据对词的语义 识别确定该代码集(功能模块)中的不可信变量。词的语义识别分成5种情况,以确定不 可信变量,包括情况1.“V”标示的变量名,说明是一个变量;情况2.“new”运算符,紧跟其后的词是一个类变量(classjar); 情况3. 由“(”符号标示的函数名,说明是一个函数调用,则进入函数体获取所有全局性变量,;情况4.由引号括起的字符串,则在字符串中获取所有全局性变量;情况5. “list”关键字,将其中出现的所有变量视为已定义变量;其中对于情况1、3和4,确定是否为不可信变量的步骤是如果该变量是第一次 出现,且为定义性出现,则变量是已定义变量(def inecLvar),置入已定义变量集合,并存储 变量的变量作用域;如果是使用性出现,则该变量是不可信变量(untrustecLvar);。而判定变量是否第一次出现步骤是将该变量匹配已定义变量集合,如果能够匹 配且在作用域内,则忽略该变量;如果不能匹配或已在作用域之外,则该变量是第一次出 现。本专利技术方法针对弱类型的PHP语言编写的Web应用,提出从入口文件识别开始,基 于每个入口文件获取Web应用功能模块;然后以模块为单位采用静态代码分析的方法解析 不可信变量。本专利技术方法同现有方法相比较,具有实现简单,性能优越,不干扰Web应用实际运营性能等优点。基于大型PHP Web应用的实验结果比对表明,本专利技术方法能够高效检 测Web应用中的不可信变量。本方法还可以方便的拓展到其他的弱类型或无类型Web应用 编程语言,具有良好的可扩展性。附图说明图1是Web应用不可信变量静态检测方法的总体框架,图2是用户的HTTP请求同入口文件(网页)的对应关系图,图3是入口文件识别的处理流程图,图4是PHPWeb应用中功能模块的组织结构图,图5是整合Web应用功能模块的处理流程图,图6是检测单个模块中不可信变量的处理流程图。具体实施例方式图1所示为PHP语言Web应用中不可信变量静态检测方法的技术框架。框架的输 入是PHP Web应用服务器端文件;输出是不可信变量汇总报告。技术框架分成四个主要模 块识别PHP Web应用的入口文件;整合PHP Web应用的功能模块;解析功能模块的不可信 变量;汇总不可信变量检测结果。首先识别PHP Web应用的所有入口文件。考虑服务器端的PHP Web应用文件,一 个Web应用可视为主目录(文件夹)本文档来自技高网
...

【技术保护点】
一种PHP语言Web应用中不可信变量的静态检测方法,其特征在于包括以下步骤:1)识别PHPWeb应用的所有入口文件;2)由入口文件出发,析取PHPWeb应用的每个功能模块的PHP代码,同时避开HTML代码的干扰,通过代码中的包含(include/require)语句采用迭代方法整合所有相关的PHP文件和代码;3)以整合后的每一个PHPWeb应用的功能模块为单位,采用静态分析的方法识别其中的不可信变量;4)汇总所有模块的解析结果,每个模块的解析结果都是一个不可信变量的集合,汇总时取各集合的并集并生成报告,报告中对每一个不可信变量都记录其所属的PHP文件和文件中的具体位置。

【技术特征摘要】

【专利技术属性】
技术研发人员:顾庆彭树深陈晓安陈道蓄
申请(专利权)人:南京大学
类型:发明
国别省市:84[中国|南京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1