一种基于Java的Web框架遍历请求地址的方法与流程

文档序号:17286995发布日期:2019-04-03 03:38阅读:383来源:国知局
一种基于Java的Web框架遍历请求地址的方法与流程

本发明涉及特别适用于特定功能的数字计算设备或数据处理设备或数据处理方法的技术领域,特别涉及一种能协助java的web安全测试流程中的白盒审计的基于java的web框架遍历请求地址的方法。



背景技术:

web应用是互联网应用的重要形式,是金融、运营商、政府部门、教育等社会关键信息系统的门户应用首选,而随着各种各样的安全事件以及影响危害巨大的安全漏洞的公布,大家也越来越关注网站应用本身的安全,越来越多网站具有应用安全漏洞检测的需求。

web应用的安全不可轻视,随着web应用的组件技术和支撑手段不断丰富变化,互联网安全下的web应用所暴露出的安全层面的问题也是层见叠出。黑客通过对暴露在公网上或者直接对未授权连接的内网环境下的web应用或者服务器进行漏洞攻击,可以获得该web应用的后台管理员权限或者该web应用所在的服务器系统权限,一方面可以直接获得该web应用或者服务器上的敏感文件、敏感数据等信息,另一方面也可以将该服务器做为跳板,对该服务器所在的内网网段进行渗透,进而攻击内网网段中其他的服务器或者其他更多的智能设备,获得大量内网敏感信息、获得服务器权限等。

javaweb开发从1999年至今已经经历近20年历程,推出了spring、struts、hibernate、ibatis等基于业务或者数据库的框架,具有防护javaweb应用可能遇到的应用层漏洞的大量模型,但是由于开发人员安全意识的薄弱、开发人员的快速流动以及javaweb框架自身存在的漏洞,经常会由于参数被污染而导致sql注入、命令注入、文件上传或者业务层面逻辑漏洞等漏洞产生。

同时,针对javaweb的静态扫描工具很多,比如商用工具fortify或者开源工具findbugs等,但是各种工具并不能获得获得更大的检验覆盖程度,同时,这些分析工具产生的结果有可能包含误判或者漏判,此时还需要人工审计,人工审计又要求开发人员要经过安全开发的训练、安全审计人员要经过审计训练,才能熟练掌握javaweb源代码安全审计方法,需要付出很大的人力成本和时间成本,安全测试无法获得获得更大的检验覆盖程度。



技术实现要素:

本发明解决了现有技术中,由于开发人员安全意识的薄弱、开发人员的快速流动以及javaweb框架自身存在的漏洞,经常会由于参数被污染而导致sql注入、命令注入、文件上传或者业务层面逻辑漏洞等漏洞产生,而分析工具产生的结果有可能包含误判或者漏判,人工审计需要付出很大的人力成本和时间成本,安全测试无法获得获得更大的检验覆盖程度的问题,本发明提供了一种优化的基于java的web框架遍历请求地址的方法。

本发明所采用的技术方案是,一种基于java的web框架遍历请求地址的方法,所述方法包括以下步骤:

步骤1:通过用户选择的框架,识别web框架类型;

步骤2:若当前web框架类型是spring框架类型的,则进行下一步,否则,返回步骤1;

步骤3:获取用户输入的项目源码所在的文件目录,遍历文件目录中的内容,进行文件夹和文件的分类;

步骤4:读取java文件内容,获得符合策略匹配的所有字符串,作为子路径;

步骤5:读取java文件内容,若获得位于声明关键词前且符合策略匹配的字符串,则为父路径,拼接到同一个java文件的每个子路径前获得完整的请求路径a,否则以子路径为请求路径a,进行下一步;

步骤6:读取web源码根目录下的项目配置文件;

步骤7:正则匹配项目配置文件,读取符合策略规则的所有servlet地址,作为独立的请求路径b;

步骤8:记录请求路径a和请求路径b,获得请求地址。

优选地,所述步骤3中,遍历文件目录;若当前为文件,则判断是否为java文件,如是,进行步骤4,若不是,则继续遍历下一个文件或文件夹;若当前为文件夹,则判断文件夹目录下是否包含java文件,如是,则进行步骤4,若不是,则继续遍历下一个文件或文件夹。

优选地,所述步骤8中,以请求地址用于验证未授权访问。

优选地,以请求地址用于验证未授权访问包括以下步骤:

步骤8.1:遍历记录的请求地址,每遍历获取一个请求地址,将请求地址构造为完整的http请求;

步骤8.2:发起http请求;

步骤8.3:请求返回结果并跳转到登录页面,则请求地址不存在未授权访问,否则进行下一步;

步骤8.4:请求存在未授权访问。

本发明提供了一种优化的基于java的web框架遍历请求地址的方法,通过识别web框架类型,为spring框架则获取用户输入的项目源码所在的文件目录,遍历文件目录中的内容,进行文件夹和文件的分类,读取java文件内容,获得符合策略匹配的所有字符串作为子路径,获得声明关键词前的字符串作为父路径并拼接到同一个java文件的每个子路径前,获得完整的请求路径a,读取web源码根目录下的项目配置文件,读取符合策略规则的所有servlet地址,作为独立的请求路径b,记录请求路径a和请求路径b,获得请求地址。

本发明可以直接由机器遍历获得所有请求地址,不需要付出很大的人力成本和时间成本,覆盖程度高,获得的请求地址可以用于协助java的web安全测试流程中的白盒审计。

附图说明

图1为本发明的流程图。

具体实施方式

下面结合实施例对本发明做进一步的详细描述,但本发明的保护范围并不限于此。

本发明涉及一种基于java的web框架遍历请求地址的方法,克服现有白盒审计技术中的不足,基于web应用框架特性能把源码中的请求遍历出来,最大程度上获取请求验证的覆盖程度。

需要特别说明的是,本发明针对spring框架类型进行处理,事实上,本领域技术人员也可以通过此发明方法对struts框架进行检测,先从struts.xml文件中匹配<includefile="获取请求配置文件,然后在请求配置的文件*struts.xml的文件内容中通过匹配<packagename="标签对里面的<actionname="获取请求路径,然后在加到web网站host后面,获取完整的请求地址,完成对struts框架的请求地址获取的发明目的。此为本领域技术人员通过本发明公开的内容后容易理解的内容。

所述方法包括以下步骤。

步骤1:通过用户选择的框架,识别web框架类型。

步骤2:若当前web框架类型是spring框架类型的,则进行下一步,否则,返回步骤1。

步骤3:获取用户输入的项目源码所在的文件目录,遍历文件目录中的内容,进行文件夹和文件的分类。

所述步骤3中,遍历文件目录;若当前为文件,则判断是否为java文件,如是,进行步骤4,若不是,则继续遍历下一个文件或文件夹;若当前为文件夹,则判断文件夹目录下是否包含java文件,如是,则进行步骤4,若不是,则继续遍历下一个文件或文件夹。

步骤4:读取java文件内容,获得符合策略匹配的所有字符串,作为子路径。

本发明中,通过filereader读取java文件内容。

本发明中,根据spring框架的特性,controller文件中使用@requestmapping来映射url到控制器类,故以正则匹配“requestmapping”关键字符,获取java文件里的路径。

本发明中,由于映射写法的多样性,正则表达式需自定义,比如如果遇到“requestmapping(value="/index")”这样的映射写法,则获取路径列表的正则表达式为“requestmapping\\(value\\s*=\\s*\"([^\"]*)\"”,通过正则匹配获取路径为“/index”。

本发明中,通过特定的正则表达式匹配文件内容,当匹配到第一个requestmapping并获取路径后,接下来从当前requestmapping后开始进行匹配获取第二个路径,后面以此类推。

步骤5:读取java文件内容,若获得位于声明关键词前且符合策略匹配的字符串,则为父路径,拼接到同一个java文件的每个子路径前获得完整的请求路径a,否则以子路径为请求路径a,进行下一步。

本发明中,大部分情况下,controller文件中还包含有父路径,当遇到如“requestmapping(value="/api")”的映射写法,则获取路径列表的正则表达式为“requestmapping\\(value\\s*=\\s*\"([^\"]*)\"”,通过正则匹配获取路径为“/api”。

本发明中,父路径的字符串与子路径的字符串不同的是,该字符串一般在“publicclass”关键字前。

本发明中,如果获取的父路径不为空,则拼接到同一个java文件的每个子路径前,如父路径为“api”、子路径为“index”,则完整的接口路径为“api/index”,得到所有的请求路径a。

本发明中,若不存在父路径,则请求路径a即为子路径。比如请求url为http://127.0.0.1/user/login,user为父路径、login为子路径,则“/user/login”为请求路径a;而若存在请求url为http://127.0.0.1/login,即没有父路径、login为子路径,则“/login”为请求路径a。

步骤6:读取web源码根目录下的项目配置文件。

步骤7:正则匹配项目配置文件,读取符合策略规则的所有servlet地址,作为独立的请求路径b。

本发明中,在spring框架中,请求的地址除了会记录在controller文件之外,还有一种会以javaservlet的方式请求。

本发明中,读取web源码根目录下web-inf目录下的项目配置文件web.xml,并通过filereader读java文件内容,读到字符串。

本发明中,正则匹配web.xml文件中<servlet-mapping>标签对里的<url-pattern>标签对里的内容,即能获得对应的所有servlet地址,以此作为请求路径b。

步骤8:记录请求路径a和请求路径b,获得请求地址。

所述步骤8中,以请求地址用于验证未授权访问。

以请求地址用于验证未授权访问包括以下步骤:

步骤8.1:遍历记录的请求地址,每遍历获取一个请求地址,将请求地址构造为完整的http请求;

步骤8.2:发起http请求;

步骤8.3:请求返回结果并跳转到登录页面,则请求地址不存在未授权访问,否则进行下一步;

步骤8.4:请求存在未授权访问。

本发明中,当请求存在未授权访问时,可以通过分析所得请求列表用于获得比如文件上传,文件下载等敏感操作的请求地址。

本发明通过识别web框架类型,为spring框架则获取用户输入的项目源码所在的文件目录,遍历文件目录中的内容,进行文件夹和文件的分类,读取java文件内容,获得符合策略匹配的所有字符串作为子路径,获得声明关键词前的字符串作为父路径并拼接到同一个java文件的每个子路径前,获得完整的请求路径a,读取web源码根目录下的项目配置文件,读取符合策略规则的所有servlet地址,作为独立的请求路径b,记录请求路径a和请求路径b,获得请求地址。本发明可以直接由机器遍历获得所有请求地址,不需要付出很大的人力成本和时间成本,覆盖程度高,获得的请求地址可以用于协助java的web安全测试流程中的白盒审计。

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