JAVA安全基础(一)JAVA EE分层模型以及MVC框架简述
2022-9-19 14:28:40 Author: www.freebuf.com(查看原文) 阅读量:6 收藏

最近刚刚开始学习java安全,在这里做一个记录,接下来会持续更新关于java安全的内容,内容如有不恰当的地方,还希望各位大佬指正。

一、Java基础知识

(1)一个java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

类:类是一个模板,它描述一类对象的行为和状态。

方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在这个方法中完成的。

实例对象:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。

(2)Java所有组成部分都需要名字。类名、变量名以及方法名都被称为标识符

(3)Java修饰符,像其他语言一样,Java可以使用修饰符来修饰类中的方法和属性。主要有两类修饰符

访问控制修饰符:default,public,protected,private

非访问控制修饰符:final、abstract、static、synchronize

二、Java EE分层模型

web开发诞生之初都是一些静态的html页面,后来随着大量需求增长和技术发展,逐渐出现了数据库和动态页面,但是没有分层概念,当时的开发者在开发项目时,会把所有的代码都写在页面上,包括数据库连接代码、事物控制代码以及各种校验和逻辑控制代码等。如果项目规模巨大,一个文件可能有上万行代码,如果开发人员需要修改业务功能或者定位BUG,会造成非常大的麻烦,可维护性查。随着时间的推移,Java EE分层模型应运而生。

Domain Object(领域对象)层:本层由一系列POJO(Plain Old Java Object,普通的、传统的Java对象)组成,这些对象是该系统的Domain Object,通常包含各自所需实现的业务逻辑方法。

DAO(Data Access Object,数据访问对象)层:本层由一系列DAO组件组成,这些DAO实现了对数据库的创建、查询、更新和删除等操作

Service(业务逻辑)层:本层由一系列的业务逻辑对象组成,这些业务逻辑对象实现了系统所需要的业务逻辑方法。

Controller(业务逻辑)层:本层由一系列控制器组成,这些控制器用于拦截用户的请求,并调用业务逻辑组件的业务逻辑方法去处理用户请求,然后根据处理结果向不同的View组件转发。

View(表现)层:本层由一系列的页面及视图组件组成,负责收集用户请求,并显示处理后的结果。

首先数据库给Domain Object层提供持久化服务,然后由Domain Object层去封装DAO层,DAO层为业务逻辑层提供数据访问服务,业务逻辑层为控制器层给予逻辑支持,最终在表现层显示结果

Java EE分层模型的应用,使得项目易于维护,简化管理,并且适应大规模和复杂的应用需求以及不断变化的业务需求,此外,分层模型还能有效提高系统并发处理能力。

在对某一项目进行代码审计时,我们需要从其输入、处理和输出来审计漏洞,遵循MVC思想。

在MVC应用程序中,有三个主要的核心部件,分别是模型、视图、控制器,他们独立处理各自的任务,这种分离的思想使得我们在审计时候能够抓住关键问题,而不用关心类似于界面显示等无关紧要的问题。

(1)了解MVC框架

MVC全名是Model View Controller,M(Model)是指数据模型,V(View)是指用户界面,C(Control)是控制器。

使用MVC的最直接目的就是将M和V实现代码分离,C则是确保M和V的同步,一旦改变,V应该同步更新。

简单来说,MVC是一个设计模式,它强制性地使应用程序地输入、处理和输出分开。MVC应用程序被分成三个核心部件:Model、View、Controller。它们独立处理各自地任务。

Java MVC模式与普通MVC的区别不大,具体如下

模型(Model):表示携带数据的对象或Java POJO。即使模型内的数据改变,它也具有逻辑来更新控制器。

控制器(Controller):表示逻辑控制,控制器对模型和视图都有作用,控制数据流进模型对象,并在数据更改时更新视图,是视图和模型的中间层。

视图(View):表示模型包含的数据可视化层。

(2)MVC的处理过程

MVC的处理过程也很容易理解,首先是Controller层接收用户的请求,然后决定该调用哪个Model来进行处理,再由Model使用逻辑处理用户的请求并返回数据,最后返回的数据通过View层呈现给用户。

MVC的模式使得视图层和业务层分离,以便更改View层代码时,不用重新编译Model和Controller代码,同样,当某个应用的业务流程或者业务规则发生改变时,只需要改动Model层即可实现需求。

此外,MVC模式使得WEB应用更易于维护和修改,有利于通过工程化、工具化管理应用程序代码。下图是MVC的处理过程。

(3)MVC架构模式

在java架构模式中,我们可以将MVC架构模式抽象为如下结:

View层。View层即UI层,可采用JSP,Structs,SpringMVC等

Controller层。Controller层表示控制器层,可采用的技术,如Servlet/Filter,Spring等

Service层。DAO层表示数据访问层,可采用的技术如jdbc和ORM框架(如Spring JDBC,JPA,Hibernate,Mybatis等)

Model层。Model层即表示JavaBean对象

Utilities层。Utilities层表示公共工具层

阶段一、Servlet/Filter扮演控制器角色

在该阶段架构模式中,Servlet/Filter扮演Controller角色,JSP扮演View角色,JavaBean扮演Model角色

该阶段的数据库访问技术为具体DB的jdbc

阶段二、SSH

在该架构模式中,Controller采用了Spring框架技术,View采用Structs框架技术,DB访问技术采用了Hibernate框架技术

从SSH中,很容易看出前后端出现了专业化,精细化分工,且朝框架演变,如前端框架采用Structs,后端框架采用Spring等

该框架笨重不灵活

阶段三、SSM

该模式中,Spring扮演着Controller角色,SpringMVC扮演着View角色(当然,小型系统,可直接用SpringMVC即可),Mybatis扮演DB访问技术

从SSH中,很容易看出前后端出现了专业化,精细化分工,且朝着框架演变。如前端框架采用Structs,后端采用Spring等

绝大部分的Java应用系统,绝大部分功能归根到底都是功能归根到底都是数据库的“增删改查”,中间加了一些数据的校验、转换和逻辑运算,因此代码审计可以找重点去审计

绝大部分应用系统,核心架构其实都是展示层,业务处理层和数据访问层。所谓的不同就是增加了一系列看似高大上的非功能性组件(缓存、分布式、并发、安全校验等),而我们审计者需要做的就是针对安全验证和业务逻辑去审计

DEBUG,对于程序员来讲,DEBUG是一个最核心的技能,挑选一个典型流程,从展示层、业务处理层、数据访问层一层一层的DEBUG下来,就可以搞清楚界面上发起的请求是如何进行业务处理,如何完成数据库操作并如何返回结果给前端界面的,对于审计者来说,也是如此,DEBUG能够帮你快速找到输入输出点,变量走向等,能够帮你快速寻找漏洞点

读懂配置文件,其实现在Java项目的配置文件相比以前已经比较少了,配置文件里面往往配置了一些请求映射、访问路径、参数设置等重要信息,审计者要能够利用这些配置信息,这能够帮我们快速入手审计

看文档,找出系统里面用到的开源框架/组件,把他们的官方文档通读一遍,搞清楚这些框架/组件是如何搭建、配置和运作的。也能够帮我们快速入手审计

徒手写漏洞。了解漏洞原理,根据原理写出一个“漏洞”,这可以加深对漏洞的理解

实践是检验真理的唯一标准


文章来源: https://www.freebuf.com/articles/web/343882.html
如有侵权请联系:admin#unsafe.sh