一种安全校验方法、装置、设备及介质与流程

文档序号:25033251发布日期:2021-05-11 17:04阅读:103来源:国知局
一种安全校验方法、装置、设备及介质与流程

本申请涉及计算机技术领域,尤其涉及一种安全校验方法、装置、设备以及计算机可读存储介质。



背景技术:

网络(web)应用广泛应用于金融、教育、电子商务等各类信息系统。为了应对一些危害较大的安全漏洞和安全事件,web应用的安全性需要不断加强,各种漏洞的检测需要实时补充,这就给web应用中灵活便捷地增加安全校验检查提出了更高要求。

javaweb技术作为web应用开发的主流技术之一,推出了struts、spring等基础框架,用于业务的快速开发,并提供了一系列技术手段进行安全防护。例如javaspring等技术提供了注解方式配置和校验检查项,但该校验是参数级别的,难以解决业务逻辑改写等漏洞产生的安全问题。



技术实现要素:

本申请提供了一种安全校验方法。该方法是一种多级校验方法,通过获取校验对象的属性值,将该属性值输入属性校验器对校验对象进行属性校验,实现了属性级校验。进一步地,当属性校验通过时,对校验对象执行全局校验流程和/或对校验对象执行交易校验流程。由此实现多级校验,对不同场景下不同粒度的安全校验均提供了支持,对已有校验进行补充和扩展,能够通过配置实现组合校验,为可能产生的安全漏洞提供一种便捷应对手段。

第一方面,本申请提供了一种安全校验方法,该方法包括:

获取校验对象的属性值,将属性值输入属性校验器对校验对象进行属性校验;

当属性校验通过时,对校验对象执行全局校验流程和/或对校验对象执行交易校验流程。

在一些可能的实现方式中,该校验对象为应用请求,例如可以是交易请求。

在一些可能的实现方式中,校验对象包括第一属性和第二属性,第一属性添加有属性校验注解,属性校验注解指示有与第一属性对应的第一属性校验器,第一属性校验器包括统一接口,第二属性添加有校验跳过注解;

获取校验对象的属性值,包括:

获取校验对象的第一属性对应的属性值,将第一属性值输入所述第一属性校验器对所述校验对象进行属性校验。

在一些可能的实现方式中,在获取校验对象的属性值之前,该方法还包括:

接收网络请求;

根据网络请求获取视图对象作为校验对象;

该方法还包括:

当全局校验通过和/或交易校验通过时,根据网络请求执行相应的业务逻辑,返回网络响应。

在一些可能的实现方式中,当校验对象对应的业务接口添加有交易校验注解时,对业务接口执行交易校验流程;

当校验对象对应的业务接口添加有校验跳过注解时,不对业务接口执行交易校验流程。

在一些可能的实现方式中,校验对象包括用于处理网络请求的接入类;

对校验对象执行全局校验流程,包括:

将接入类的方法和参数输入全局校验器,执行全局校验逻辑。

在一些可能的实现方式中,当全局校验开关为开启时,对校验对象执行全局校验流程,否则不执行全局校验流程。

第二方面,本申请提供了一种安全校验装置,该装置包括:

通信模块,用于获取校验对象的属性值;

属性校验模块,用于将属性值输入属性校验器对校验对象进行属性校验;

全局校验模块和/或交易校验模块,用于当属性校验通过时,对校验对象执行全局校验流程和/或对校验对象执行交易校验流程。

在一些可能的实现方式中,校验对象包括第一属性和第二属性,第一属性添加有属性校验注解,属性校验注解指示有与第一属性对应的属性校验器,属性校验器包括统一接口,第二属性添加有校验跳过注解;

通信模块具体用于:

获取校验对象的第一属性对应的属性值。

在一些可能的实现方式中,该装置还包括:

接收模块,用于接收网络请求;

获取模块,用于根据网络请求获取视图对象作为校验对象;

返回模块,用于当全局校验通过和/或交易校验通过时,根据网络请求执行相应的业务逻辑,返回网络响应。

在一些可能的实现方式中,校验对象为接收网络请求的业务接口;

当业务接口添加有交易校验注解时,对业务接口执行交易校验流程;

当业务接口添加有校验跳过注解时,不对业务接口执行交易校验流程;

在一些可能的实现方式中,校验对象包括用于处理网络请求的接入类;

校验模块具体用于:

将接入类的方法和参数输入全局校验器,执行全局校验逻辑。

在一些可能的实现方式中,该校验模块还用于:

当全局校验开关为开启时,对校验对象执行全局校验流程,否则不执行全局校验流程。

第三方面,本申请提供一种设备,设备包括处理器和存储器。处理器、存储器进行相互的通信。处理器用于执行存储器中存储的指令,以使得设备执行如第一方面或第一方面的任一种实现方式中的安全校验方法。

第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,指令指示设备执行上述第一方面或第一方面的任一种实现方式所述的安全校验方法。

第五方面,本申请提供了一种包含指令的计算机程序产品,当其在设备上运行时,使得设备执行上述第一方面或第一方面的任一种实现方式所述的安全校验方法。

本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。

从以上技术方案可以看出,本申请实施例具有以下优点:

本申请提供了一种安全校验方法,该方法具体是一种多级校验方法。该方法通过获取校验对象的属性值,将所述属性值输入属性校验器对所述校验对象进行属性校验,实现属性级(参数级)校验。进一步地,当属性校验通过时,还对校验对象执行全局校验流程,或者对校验对象执行方法(function)级别的交易校验流程。由此实现多级校验,对不同场景下不同粒度的安全校验均提供了支持,对已有校验进行补充和扩展,能够通过配置实现组合校验,为可能产生的安全漏洞提供一种便捷应对手段。

进一步地,该安全校验方法包括针对业务接口的统一注解,以及统一的校验器接口,作用于业务接口的方法(function)上,开发人员通过实现当前交易的校验器,就能够对业务接口的所有参数进行统一校验。如此实现了不同业务场景下的个性化校验,开发人员只需了解统一注解的使用方式,关注业务逻辑,实现相应的校验器逻辑即可,避免了理解注解导致开发人员工作量大幅增加。

附图说明

为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种安全校验方法的流程示意图;

图2为本申请实施例提供的一种属性校验方法的流程示意图;

图3为本申请实施例提供的一种全局校验方法的流程示意图;

图4为本申请实施例提供的一种交易校验方法的流程示意图;

图5为本申请实施例提供的一种安全校验方法的流程示意图;

图6为本申请实施例提供的一种安全校验装置的结构示意图。

具体实施方式

下面将结合本申请中的附图,对本申请提供的实施例中的方案进行描述。

本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。

首先对本申请实施例中所涉及到的一些技术术语进行介绍。

网络(web)应用是一种能够通过web访问的信息系统,计数器、留言板、管理信息系统等都是常见的web应用。

随着web应用的不断复杂化,复杂应用中系统代码不断增多,web有可能产生安全问题,因此web应用的安全性也需要不断加强。

安全校验是一种常用的用于维护web应用安全性的技术。javaspring等技术通过收到web请求的业务接口对请求实现类拦截,以获取需要校验的注解,以此来对web请求所指示的对象进行校验,校验包括获取接口中的参数值,根据每个参数中的注解类型,对每个参数匹配相应的检查规则进行校验。这种校验是参数级别的校验,当场景变换时,规则需要根据场景的变化进行变化,还需要在规则变化时添加新的注解,注解不断增多,同时操作过程繁琐。

有鉴于此,本申请提供了一种多级安全校验方法,该方法可以由处理设备执行。其中,处理设备为具有数据处理能力的设备,例如可以是服务器,也可以是台式机、笔记本电脑或者智能手机等终端设备。

具体地,处理设备获取校验对象的属性值,将该属性值输入属性校验器对校验对象进行属性校验,实现属性级(参数级)校验。当属性校验通过时,处理设备对校验对象执行全局校验流程和/或对校验对象执行交易校验流程。由此实现多级校验,对不同场景下不同粒度的安全校验均提供了支持,对已有校验进行补充和扩展,能够通过配置实现组合校验,为可能产生的安全漏洞提供一种便捷应对手段。

为了便于理解,下面结合附图对本申请实施例提供的安全校验方法进行具体介绍。

s102:处理设备获取校验对象的属性值,将该属性值输入属性校验器对该校验对象进行属性校验。

校验对象是处理设备根据所获取的网络请求获取的视图对象。视图是一个虚拟表,视图的内容由查询定义。本申请中,视图对象用于展示层,封装有指定页面或组件的所有数据。

在一些可能的实现方式中,该校验对象为应用请求,例如可以是交易请求。具体地,例如通过atm进行余额查询,用户输入的信息会被封装为一个应用请求,通常可以用一个http请求实现,校验对象就是这个http请求,其中包含很多元素,比如公有域包括公共参数、通信参数、编码字符集等,私有域包括用户卡号、用户卡密、atm编号等等。

属性校验,即对应用请求的公有域、私有域中的字段和值进行合法性校验,检测其是否合法(例如卡号类型是否是银行合法的)以及是否有安全漏洞(例如卡号信息是否包含一些黑客攻击的脚本),如果属性校验不能通过,后续对这个应用请求的其他处理(例如根据卡号卡密查询余额拿到结果)都不需要继续进行。

具体地,处理设备获取客户端发起的网络请求,根据该网络请求获取封装有指定页面或组件的所有数据的视图对象,并将该视图对象作为校验对象。

可选的,处理设备可以根据基于spring扩展的拦截器对网络请求进行拦截,由此获得该网络请求的视图对象,并将该视图对象作为校验对象。

在一些可能的实现方式中,处理设备预先在视图对象的待校验属性上添加属性校验注解,注解中将执行该属性安全校验的校验器指定为属性校验器。属性校验器用于实现属性校验统一接口。处理设备开发对应的属性校验器,完成该属性的安全性合法性校验逻辑。对于无需校验的属性,处理设备添加校验跳过注解。

因此,处理设备将通过网络请求获取的视图对象作为校验对象,校验对象包括第一属性和第二属性,第一属性添加有属性校验注解,属性校验注解指示有与第一属性对应的第一属性校验器,第一属性校验器包括统一接口,第二属性添加有校验跳过注解。处理设备根据校验对象的第一属性值,将该属性值输入与第一属性对应的属性校验器,属性校验器对校验对象进行属性校验。

可选的,处理设备在视图对象的类上添加请求别名注解,该请求别名注解用于根据请求的不同,控制是否开启对应的属性校验。通常,处理设备在视图对象的类上不配置别名注解的情况默认为开启对应的属性注解。

具体地,处理设备获取校验对象的属性值,判断校验对象的类是否包括别名注解,根据该别名注解判断是否执行该属性校验。当该别名注解指示的属性校验功能开启时,处理设备检查校验对象的第二属性,判断该对象是否添加有校验跳过注解,如果添加有校验跳过注解,则跳过当前校验,执行后续校验。处理设备根据校验对象的第一属性中的属性校验注解,通过反射方式创建属性校验器,处理设备将该校验对象的属性值作为参数传入进行校验,得到校验结果。

如果属性校验结果通过则处理设备继续执行后续校验;不通过处理设备则提示异常,属性校验检查中断,网络请求被拒绝。

例如对于一个交易请求(卡号、卡密),进行属性校验,校验注解为@valid,校验跳过注解为@validignore,那么属性校验是指:卡号配置@valid,卡密配置@validignore,能够对卡号进行属性校验,对卡密不进行属性校验。实际的交易请求中包含n多字段,这样可以灵活定制哪些进行校验、哪些不进行校验。s104:处理设备对校验对象执行全局校验流程。

校验对象用于处理该网络请求的接入类,例如数字用户线(digitalsubscriberline,dsl)和混合光纤同轴电缆(hybridfibercoaxialcable,hfc)。全局校验是一种特殊的交易校验。交易校验作用于收到网络请求的业务接口,是方法级的校验,能够基于接口的所有参数根据业务场景开展业务校验。全局校验面向所有网络请求均生效,由此可以提供一种全局级的安全管控。

处理设备添加全局校验注解,注解中确定执行全局校验的处理器,该校验器能够实现全局校验统一接口,针对所有处理网络请求的处理类生效,由此可以完成全局级别的安全校验逻辑。

可选的,处理设备可以在全局校验注解中预先配置全局安全校验启动开关,当开关开启时,执行全局安全校验,否则跳过全局安全校验。通常情况下,不配置该全局安全校验启动开关默认为启动安全校验。

可选的,处理设备可以通过全局校验面向切面编程(aspectorientedprogramming,aop)对校验对象进行全局校验。

具体地,处理设备通过全局校验注解获取校验对象的全局校验开关配置,当该全局校验开关开启时,处理设备判断该校验对象是否添加有校验跳过注解,如果添加有校验跳过注解,则跳过全局安全校验。处理设备根据校验对象的全局校验注解,通过反射生成全局校验器,处理设备扫描所有处理网络请求的接入类,将其所有方法和参数作为全局校验器的输入,进行全局安全校验。

当校验通过时,处理设备执行后续校验;否则处理设备提示异常,全局校验检查中断,所接收的网络请求被拒绝。

s106:处理设备对校验对象执行交易校验流程。

校验对象为接收网络请求的业务接口。

同样的,处理设备在接收网络请求的业务接口上添加交易校验注解,在交易校验注解中对执行交易校验的交易校验器进行配置。具体地,处理设备在接收网络请求的业务接口上添加交易校验注解,注解中指定该接口的校验器为交易校验器,交易校验器需实现交易校验统一接口。处理设备开发交易校验器,完成对该接口的安全性合法性校验逻辑。对于无需校验的接口,添加校验跳过注解。

可选的,处理设备对交易校验器的业务接口添加交易校验注解中,可以包括该请求别名注解,用于根据请求的不同,控制是否开启对应的交易安全校验。通常情况下,不配置别名注解视为开启对应的交易安全校验。

可选的,处理设备可以通过全局校验aop对校验对象进行交易安全校验。

具体地,处理设备通过别名注解判断当前的交易安全开关是否开启,如果开启,则进一步判断当前请求接口是否添加有校验跳过注解,当交易安全开关开启且没用添加校验跳过注解时,继续执行校验。处理设备根据交易校验注解,通过反射生成交易校验器,处理设备将处理请求的接口参数作为校验输入该交易校验器,进行交易级别的校验。

当校验通过时,处理设备执行后续校验,否则处理设备提示异常,交易校验检查中断,网络请求被拒绝。

在具体实现中,根据校验注解中是否包括请求别名注解,对应的安全校验是否开启以及是否添加有校验跳过注解,对上述s104和s106进行灵活执行。例如可以在执行该安全校验方法时,不执行s104,或者不执行s106,也可以在执行s102之后,对s104和s106均执行,具体执行根据安全校验的实际需要,本申请在此不作限制。

当上述s104中的全局校验通过和/或s106中的交易校验通过时,根据网络请求执行相应的业务逻辑,返回网络响应。由此,本申请实施例提供了一种多级校验方法。该方法通过获取校验对象的属性值,将所述属性值输入属性校验器对所述校验对象进行属性校验,实现属性级(参数级)校验。进一步地,当属性校验通过时,还对校验对象执行全局校验流程,或者对校验对象执行方法(function)级别的交易校验流程。由此实现多级校验,对不同场景下不同粒度的安全校验均提供了支持,对已有校验进行补充和扩展,能够通过配置实现组合校验,为可能产生的安全漏洞提供一种便捷应对手段。

进一步地,该安全校验方法包括针对业务接口的统一注解,以及统一的校验器接口,作用于业务接口的方法(function)上,开发人员通过实现当前交易的校验器,就能够对业务接口的所有参数进行统一校验。如此实现了不同业务场景下的个性化校验,开发人员只需了解统一注解的使用方式,关注业务逻辑,实现相应的校验器逻辑即可,避免了理解注解导致开发人员工作量大幅增加。

同时,本实施例还定义了统一的接口作为aop实现类中定位待检查类的标准。只有实现了统一接口的业务类接口,才会触发校验。这种方式无需配置包路径,并且规范了业务接口代码的编写,降低了安全校验的风险。

并且,本实施例还提供了灵活的开关配置手段,以便开发人员能够根据当前业务场景,多层次控制校验的启停,从而达到组合校验的目的,使校验适应于复杂的场景。

本实施例中的安全校验,覆盖了绝大多数安全校验的场景,给予开发人员统一的校验器接口,校验输入明确,校验逻辑只需关注业务需求和场景,使业务层面更加灵活可控。

下面结合图2、图3和图4对上述步骤中s102、s104和s106的属性校验、全局校验和交易校验的步骤作具体介绍。

首先结合图2对s102中的属性校验步骤进行介绍。

s202:处理设备获取客户端发起的web请求。

具体地,处理设备可以根据基于spring扩展的拦截器对网络请求进行拦截,由此获取客户端所发起的网络请求。

s204:处理设备根据web请求,确定校验对象。

处理设备根据该网络请求,获取网络请求的视图对象,将该视图对象作为校验对象。

s206:处理设备判断校验对象的类是否包括别名注解。

处理设备检查校验对象的类是都包括别名注解,别名注解用于控制是否开启属性校验,其中,不包括别名注解视为开启属性注解。

包括别名注解进入s208,不包括进入s210。

s208:处理设备根据别名注解,判断该对象的属性校验功能是否开启。

属性校验功能开启进入s210,否则结束当前校验。

s210:处理设备检查该对象是否添加有校验跳过注解。

添加有校验跳过注解结束当前校验,否则进入s212。

s212:处理设备根据属性校验注解,创建校验器。

具体地,处理设备根据属性校验注解,获取注解中校验器的名称为属性校验器,通过反射的方式创建属性校验器。

s214:处理设备将属性值作为参数传入校验器,得到校验结果。

校验结果通过则结束当前校验,否则提示异常,当前属性校验中断。

以上对s102中的属性校验步骤作了具体介绍,下面结合图3对s104中的全局校验流程步骤进行介绍。

s302:处理设备通过aop获取全局校验开关。

s304:处理设备判断全局校验开关是否启用。

全局校验开关开启进入s210,否则结束当前校验。

s306:处理设备根据全局校验注解,创建校验器。

具体地,处理设备根据全局校验注解,获取注解中校验器的名称为全局校验器,通过反射的方式创建全局校验器。

s308:处理设备扫描所有处理网络请求的接入类,将其所有方法和参数传入校验器,得到校验结果。

校验结果通过则结束当前校验,否则提示异常,当前全局校验中断。

以上对s102、s104中的属性校验、全局校验步骤进行了具体介绍,下面结合图4对s106中的交易校验步骤进行介绍。

s402:处理设备通过aop获取交易校验开关。

s404:处理设备判断交易校验开关是否启用。

交易校验开关开启进入s406,否则结束当前校验。

s406:处理设备检查该对象是否添加有校验跳过注解。

添加有校验跳过注解结束当前校验,否则进入s408。

s408:处理设备根据交易校验注解,创建校验器。

具体地,处理设备根据交易校验注解,获取注解中校验器的名称为交易校验器,通过反射的方式创建交易校验器。

s410:处理设备将接口参数作为输入传入校验器,得到校验结果。

校验结果通过则结束当前校验,否则提示异常,当前交易校验中断。

当上述所需执行的所有校验步骤结束后,该安全校验结束,处理设备开始进行业务处理。

下面结合具体示例介绍各级校验,参见图5所示,通常情况下校验环节均包括属性校验,全局校验是指所有交易都要进行的公共校验,全局校验的处理逻辑单独定义,当属性校验完成后,如果开启了全局校验,自动触发全局校验。交易校验是指每个交易自身特色的校验,需要每个交易自己进行定义,同时也有开关。例如相对卡密和卡号同时校验,无法通过属性校验进行,例如卡密符合规则1且卡号符合规则2才通过检查。与上述方法实施例相对应的,本申请还提供了一种安全校验的装置,参见图6,该装置600包括:通信模块602和校验模块604。

通信模块602,用于获取校验对象的属性值;

校验模块604,用于将属性值输入属性校验器对校验对象进行属性校验,当属性校验通过时,对校验对象执行全局校验流程和/或对校验对象执行交易校验流程。

在一些可能的实现方式中,校验对象包括第一属性和第二属性,第一属性添加有属性校验注解,属性校验注解指示有与第一属性对应的属性校验器,属性校验器包括统一接口,第二属性添加有校验跳过注解;

通信模块602具体用于:

获取校验对象的第一属性对应的属性值。

在一些可能的实现方式中,该装置600还包括:

接收模块,用于接收网络请求;

获取模块,用于根据网络请求获取视图对象作为校验对象;

返回模块,用于当全局校验通过和/或交易校验通过时,根据网络请求执行相应的业务逻辑,返回网络响应。

在一些可能的实现方式中,校验对象为接收网络请求的业务接口;

当业务接口添加有交易校验注解时,对业务接口执行交易校验流程;

当业务接口添加有校验跳过注解时,不对业务接口执行交易校验流程;

在一些可能的实现方式中,校验对象包括用于处理网络请求的接入类;

校验模块604具体用于:

将接入类的方法和参数输入全局校验器,执行全局校验逻辑。

在一些可能的实现方式中,该校验模块204还用于:

当全局校验开关为开启时,对校验对象执行全局校验流程,否则不执行全局校验流程。

本申请提供一种设备,用于实现安全校验方法。该设备包括处理器和存储器。处理器、存储器进行相互的通信。该处理器用于执行存储器中存储的指令,以使得设备执行安全校验方法。

本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在设备上运行时,使得设备执行上述安全校验方法。

本申请提供了一种包含指令的计算机程序产品,当其在设备上运行时,使得设备执行上述安全校验方法。

另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、rom、ram、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,训练设备,或者网络设备等)执行本申请各个实施例所述的方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、训练设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、训练设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。

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