一种基于Spring注解的安全开发校验方法与流程

文档序号:20840145发布日期:2020-05-22 17:23阅读:163来源:国知局
一种基于Spring注解的安全开发校验方法与流程

本发明涉及错误检测;错误校正;监控的技术领域,特别涉及一种基于spring注解的安全开发校验方法。



背景技术:

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

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

javaweb开发从1999年至今已经经历近20年历程,推出了spring、struts、hibernate、ibatis等基于业务或者数据库的框架,具有很多可以防护javaweb应用会遇到的应用层漏洞的模具,如各种硬件或者软件waf;然而,除了需要消耗一定的成本外,一些容易被绕过的风险还是存在,且这些waf的防护的结果有可能包含误判或者漏判,一些开发人员自己编写的防护过滤器并不能最大程度的限制安全漏洞的产生,还可能需要人工干预审计代码。

另一方面,由于部分开发人员安全意识的薄弱、开发人员的快速流动以及javaweb框架自身存在的漏洞,在日常开发软件过程中对用户传入的数据类型、数据长度、数据的字符并未进行合理有效的校验,在接口对外开放的过程中容易被外部攻击者传入恶意的攻击数据(一些特殊字符,超长字符串等等)进行漏洞攻击,经常会由于参数被污染而导致sql注入、命令注入、文件上传或者业务层面逻辑漏洞等漏洞产生,虽然可以利用注解校验的方式实现对对外提供的接口强制校验、杜绝外部传入恶意不规范的数据引起的安全漏洞相关问题,且通过注解的方式可以轻松的配置所有的检查项,但是仍然无法解决逻辑漏洞产生的安全问题。

综上所述,现有技术中,web安全开发的过程消耗大量人力物力,如果采用硬件waf则需要采购相应的硬件设备进行支持,且不能防护所有类型的安全漏洞,容易产生误报以及漏洞,无法从根源上解决问题,同时现有的基于java安全防护的规则编写繁琐,并不能最大程度的限制安全漏洞的产生。



技术实现要素:

本发明解决了现有技术中,web安全开发的过程消耗大量人力物力,如果采用硬件waf则需要采购相应的硬件设备进行支持,且不能防护所有类型的安全漏洞,容易产生误报以及漏洞,无法从根源上解决问题,同时现有的基于java安全防护的规则编写繁琐,并不能最大程度的限制安全漏洞的产生的问题,提供了一种优化的基于spring注解的安全开发校验方法。

本发明所采用的技术方案是,一种基于spring注解的安全开发校验方法,所述方法包括以下步骤:

步骤1:配置用于查找spring对外开放的接口文档的扫描包;

步骤2:配置与所述扫描包对应的aop实现类,用于拦截所有对外开放接口;

步骤3:判断被拦截的接口的类是否为spring自带的类,如是,则结束,否则,判断被拦截的接口的类的关联参数是否指向spring自带的类,若关联参数均指向spring自带的类则结束,否则,进行下一步;

步骤4:获取被拦截的接口的方法对应的参数值,根据参数注解的类型选择对应的检测规则,查找对应的控制类文件;

步骤5:在每个对外开放接口添加需要校验的注解类;

步骤6:启用web应用;

步骤7:任一接口对请求进行校验,若合法,则接受请求,否则拒绝,重复步骤7。

优选地,所述步骤2中,所述对外开放接口为添加requestmapping注解的方法。

优选地,所述步骤3中,判断被拦截的接口的类的关联参数是否指向spring自带的类包括以下步骤:

步骤3.1:以java反射的方式,对接口的方法涉及的参数进行获取;

步骤3.2:基于获取的参数,获取对应每个参数的类型;

步骤3.3:逐个判断每个参数的类型是否为spring自带的类,若是,则结束,否则,进行步骤4。

优选地,所述步骤4中,参数注解的类型包括id序号属性注解、ip地址属性注解、邮箱属性注解、路径属性注解、域名属性注解、url属性注解、普通参数属性注解、对象参数注解、文件上传属性注解和不安全参数属性注解。

本发明提供了一种优化的基于spring注解的安全开发校验方法,通过配置用于查找spring对外开放的接口文档的扫描包及与其对应的用于拦截所有对外开放接口的aop实现类,当被拦截的接口的类及关联参数为spring自带的类时则结束,否则获取被拦截的接口的方法对应的参数值,根据参数注解的类型选择对应的检测规则、查找对应的控制类文件,在每个对外开放接口添加需要校验的注解类;处理完后启用web应用,接口持续对收到的请求进行校验,合法则接受请求,否则拒绝。

本发明解决了java开发人员在日常软件应用开发中不规范的使用传入的数据,从而导致开发过程中产生安全漏洞的问题,利用spring提供的aop框架接口来代理所有对外接口的参数调用,利用自定义的注解校验的方式实现对对外提供的接口强制校验,杜绝外部传入恶意不规范的数据引起的安全漏洞相关问题,开发人员只需要在对应的对外接口中添加特定的注解即可完成数据的校验。本发明采用spring框架下的aop技术,以多种规则的校验算法实现通用接口漏洞防护的方案,针对不同的数据进行不同规则的匹配应用,规则编写简易化,通用性强。

附图说明

图1为本发明的流程图。

具体实施方式

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

本发明涉及一种基于spring注解的安全开发校验方法,所述方法包括以下步骤。

步骤1:配置用于查找spring对外开放的接口文档的扫描包。

本发明中,扫描包的配置为常规技术,本领域技术人员可以通过xml配置文件或者通过注解的方式进行简单配置。

步骤2:配置与所述扫描包对应的aop实现类,用于拦截所有对外开放接口。

所述步骤2中,所述对外开放接口为添加requestmapping注解的方法。

本发明中,aop是spring框架面向切面的编程思想,aop是将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,并在合适的时机将这些切面横向切入到业务流程指定的位置中的技术,aop实现类是将springaop中提供的aop技术的接口标准进行自定义的开发实现,根据spring提供的接口功能开发出自己需要的功能,达到对业务流程的干预。

本发明中,requestmapping是spring框架中一个用来处理请求地址映射的注解,可用于类或方法上。

步骤3:判断被拦截的接口的类是否为spring自带的类,如是,则结束,否则,判断被拦截的接口的类的关联参数是否指向spring自带的类,若关联参数均指向spring自带的类则结束,否则,进行下一步。

所述步骤3中,判断被拦截的接口的类的关联参数是否指向spring自带的类包括以下步骤:

步骤3.1:以java反射的方式,对接口的方法涉及的参数进行获取;

步骤3.2:基于获取的参数,获取对应每个参数的类型;

步骤3.3:逐个判断每个参数的类型是否为spring自带的类,若是,则结束,否则,进行步骤4。

步骤4:获取被拦截的接口的方法对应的参数值,根据参数注解的类型选择对应的检测规则,查找对应的控制类文件。

所述步骤4中,参数注解的类型包括id序号属性注解、ip地址属性注解、邮箱属性注解、路径属性注解、域名属性注解、url属性注解、普通参数属性注解、对象参数注解、文件上传属性注解和不安全参数属性注解。

本发明中,参数注解的类型包括但不限于id序号属性注解、ip地址属性注解、邮箱属性注解、路径属性注解、域名属性注解、url属性注解、普通参数属性注解、对象参数注解、文件上传属性注解和不安全参数属性注解;其中,id序号属性注解用来校验整数类型,ip地址属性注解用来校验ip类型,邮箱属性注解用来校验mail类型,路径属性注解用来校验文件路径类型,域名属性注解用来校验域名,url属性注解用来校验url类型,普通参数属性注解用来校验普通的参数,对象参数用来校验javapojo对象,文件上传属性注解用来校验上传文件后缀,不安全参数属性注解允许任何类型的字符。

本发明中,一般情况下,普通参数属性注解只允许字母、数字、中文等字符注解。

本发明中,一般情况下,对象参数中pojo对象的属性会被上述注解校验。

本发明中,一般情况下,文件上传属性注解默认只允许zip、rar、doc、docx、xls、xlsx、ppt、pptx、xml、txt、jpg、png、gif、jpeg、mp3、mp4这些后缀注解。

本发明中,一般情况下,在使用不安全参数属性时,必须有足够的理由说明为什么一定要使用。

本发明中,不同的参数类型检测的方式不一致,针对id类型的参数,只需要校验其内容是否符合整数类型,针对ip类型的参数,只需要校验其内容是否符合ip规范,而针对其他不同类型的参数,则需要根据该类型的参数合规性来制定特定的规则,这需要后期自定义实现;自定义检测注解可以依据本领域技术人员的需求自行设置,不限于上述注解。

本发明中,控制类为控制部分,一般是针对view层提交的请求,为其设置对应的servlet进行特定功能的处理,一般只在web应用中作为中介存在。

步骤5:在每个对外开放接口添加需要校验的注解类。

本发明中,注解(annotation)是代码级别的说明,与类、接口、枚举处于同一个层次,可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

本发明中,步骤5中,在每个需要被拦截的接口上的参数前添加一个注解方法即可,如对外的原始接口为“publicvoidsay(stringid){}”,添加了注解之后的接口为“publicvoidsay(@safeidstringid){}”,这样就实现了对id参数值合法性校验的功能。

步骤6:启用web应用。

步骤7:任一接口对请求进行校验,若合法,则接受请求,否则拒绝,重复步骤7。

本发明中,实现的代码结合springaop技术,将自动提取程序对外接口方法对应的参数值以及参数类型、根据不同的校验注解类型选择对应的校验规则,从而实现对接口参数数据的合法性校验,该逻辑流程均在代码中实现,后期只需添加规则,在对应的接口参数上添加对应类型的注解,即可实现对接口参数的合法性校验。

本发明通过配置用于查找spring对外开放的接口文档的扫描包及与其对应的用于拦截所有对外开放接口的aop实现类,当被拦截的接口的类及关联参数为spring自带的类时则结束,否则获取被拦截的接口的方法对应的参数值,根据参数注解的类型选择对应的检测规则、查找对应的控制类文件,在每个对外开放接口添加需要校验的注解类;处理完后启用web应用,接口持续对收到的请求进行校验,合法则接受请求,否则拒绝。本发明解决了java开发人员在日常软件应用开发中不规范的使用传入的数据,从而导致开发过程中产生安全漏洞的问题,利用spring提供的aop框架接口来代理所有对外接口的参数调用,利用自定义的注解校验的方式实现对对外提供的接口强制校验,杜绝外部传入恶意不规范的数据引起的安全漏洞相关问题,开发人员只需要在对应的对外接口中添加特定的注解即可完成数据的校验。本发明采用spring框架下的aop技术,以多种规则的校验算法实现通用接口漏洞防护的方案,针对不同的数据进行不同规则的匹配应用,规则编写简易化,通用性强。

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