• Java内存马学习--Filter内存马——前置概念


    一.环境搭建

    1.创建Servlet:IntelliJ IDEA创建Servlet最新方法 Idea版本2020.2.2以及IntelliJ IDEA创建Servlet 404问题(超详细)_Granger_g的博客-CSDN博客_idea创建servlet项目

    2.给项目添加pom.xml,变成Maven项目

    右键项目名称(untitled3)

    然后选中Maven即可

    然后加入依赖

        

            org.apache.tomcat

            tomcat-catalina

            9.0.52

            provided

        

    二.基本知识

    2.1 Tomcat 简介

    2.1.1 Servlet

    Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。它负责处理用户的请求,并根据请求生成相应的返回信息提供给用户。

    请求的处理流程:

     1. 客户端发起一个http请求,比如get类型。

     2. Servlet容器接收到请求,根据请求信息,封装成HttpServletRequest和HttpServletResponse对象。

     3. Servlet容器调用HttpServlet的init()方法,init方法只在第一次请求的时候被调用。

     4. Servlet容器调用service()方法。service()方法根据请求类型,这里是get类型,分别调用doGet或者doPost方法,这里调用doGet方法。doXXX方法中是我们自己写的业务逻辑。

     5. 业务逻辑处理完成之后,返回给Servlet容器,然后容器将结果返回给客户端。容器关闭时候,会调用destory方法

        2.1.2 Tomcat 与 Servlet 的关系

    Tomcat 是 Web 应用服务器,是一个 Servlet/JSP 容器,Tomcat 作为 Servlet 的容器,能够将用户的请求发送给 Servlet,并且将 Servlet 的响应返回给用户,Tomcat中有四种类型的Servlet容器,从上到下分别是 Engine、Host、Context、Wrapper

    1. Engine,实现类为 org.apache.catalina.core.StandardEngine

    2. Host,实现类为 org.apache.catalina.core.StandardHost

    3. Context,实现类为 org.apache.catalina.core.StandardContext

    4. Wrapper,实现类为 org.apache.catalina.core.StandardWrapper

    它们之间是存在父子关系的

    • Engine:可以用来配置多个虚拟主机,每个虚拟主机都有一个域名,当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理,Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理。

    • Host:一个 Host 代表一个虚拟主机,其下可以包含多个 Context。

    • Context:一个Context对应于一个Web Application,一个WebApplication由一个或者多个Servlet组成。 Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类,当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类。如果找到,则执行该类,获得请求的回应,并返回。

    • Wrapper:一个 Wrapper 代表一个 Servlet。

    每个Wrapper实例表示一个具体的Servlet定义,StandardWrapper是Wrapper接口的标准实现类(StandardWrapper 的主要任务就是载入Servlet类并且进行实例化)

    最终的流程图如下:

     

        2.1.3 Tomcat容器

    在 Tomcat 中,每个 Host 下可以有多个 Context (Context 是 Host 的子容器), 每个 Context 都代表一个具体的Web应用,都有一个唯一的路径就相当于下图中的 /shop /manager 这种,在一个 Context 下可以有着多个 Wrapper Wrapper 主要负责管理 Servlet ,包括的 Servlet 的装载、初始化、执行以及资源回收

    2.2 Filter

    filter也称之为过滤器,过滤器实际上就是对web资源进行拦截,做一些过滤,权限鉴别等处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。

    当多个filter同时存在的时候,组成了filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter。第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

      如果我们动态创建一个filter并且将其放在最前面,我们的filter就会最先执行,当我们在filter中添加恶意代码,就会进行命令执行,这样也就成为了一个内存 Webshell。

  • 相关阅读:
    LeetCode494:目标和
    自己动手从零写桌面操作系统GrapeOS系列教程——19.硬盘读写理论知识
    同一台Linux同时安装MYSQL5.7和MYSQL8(第一篇)
    微服务之SpringCloud AlibabaNacos服务注册和配置中心
    840. 矩阵中的幻方。python三连双等 a==b==c
    Oracle P6 -SQLServer数据库乱码案例分享
    场景应用:用SpringBoot手写一个登录拦截器
    harvard dataverse数据公开上传网站-数据库repository
    单元测试框架——Junit5
    C语言-【指针二】-【指针运算/指针和数组】
  • 原文地址:https://blog.csdn.net/qq_44769520/article/details/126152128