首页 > 数据库 >Day33:安全开发-JavaEE应用&SQL预编译&Filter过滤器&Listener监听器&访问控制

Day33:安全开发-JavaEE应用&SQL预编译&Filter过滤器&Listener监听器&访问控制

时间:2024-12-16 17:32:03浏览次数:3  
标签:JavaEE System Listener 监听器 println import servlet javax out

一,JavaEE-过滤器Filter

1,过滤器的含义:

Filter被称为过滤器,过滤器实际上就是对Web资源进行拦截,做一些处理后再交给下一个过滤器或Servlet处理,通常都是用来拦截request进行处理的,也可以对返回的 response进行拦截处理。开发人员利用filter技术,可以实现对所有Web资源的管理,例如实现权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

1815b77f8fd971e74ae897717b0f5adb

2,过滤器的应用场景:

Payload检测,权限访问控制,红队内存马植入,蓝队清理内存马等(内存马参考):https://mp.weixin.qq.com/s/hev4G1FivLtqKjt0VhHKmw

3,过滤器检测xss的项目

(1),TestServlet文件(用于接受参数code,并返回code的值到客户端)

package com.example.filterdemo1.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/test")
public class TestServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("---------doGet");
        String code=req.getParameter("code");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out=resp.getWriter();
        out.println("这是GET请求的数据");
        out.println("code: "+code+"<br>");
        out.flush();
        out.close();
    }
}

(2),XssFilter文件(实现Filter接口中的方法)

package com.example.filterdemo1.filter;
 
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
 
@WebFilter("/test")
public class XssFilter implements Filter {
    @Override
    //中间件启动后就自动运行,无需访问路由
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("xss开启过滤");
    }
 
    @Override
    //中间件关闭后就自动运行
    public void destroy() {
        System.out.println("xss销毁过滤");
    }
 
    @Override
    //doFilter 访问路由触发的方法
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("xss正在过滤");
        //过滤代码就应该在放行前
        //如果符合就放行,不符合就过滤(拦截)
        //XSS过滤 接受参数值 如果有攻击payload 就进行拦截
        // 接受参数值 如果没有攻击payload 就进行放行
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        String code = request.getParameter("code");
        if(!code.contains("<script>")){ //没有攻击payload
            //放行
            filterChain.doFilter(servletRequest,servletResponse);
        }else{
            System.out.println("存在XSS攻击");
            //继续拦截
        }
 
    }
}

4,过滤器实现cookie身份验证

项目功能:检测客户端的cookie的user值是否为amin

AdminServlet文件

@WebServlet("/admin")
public class AdminServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("欢迎进入管理员页面");
    }
}

AdminFilter文件

package com.example.filterdemo1.filter;
 
 
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
 
@WebFilter("/admin")
public class AdminFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("admin身份检测开启");
    }
 
    @Override
    public void destroy() {
        System.out.println("admin身份检测销毁");
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
 
        System.out.println("admin身份检测进行");
        //检测Cookie过滤
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        Cookie[] cookies=request.getCookies();
        //对Cookie进行遍历获取
        for(Cookie c:cookies){
            String cName = c.getName();//获取cookie名
            String cValue = c.getValue();//获取cookie值
            System.out.println(cName);
            System.out.println(cValue);
            if(cName.contains("user") && cValue.contains("admin")){
                // filterChain 是一个 FilterChain 对象,代表过滤器链。
                // doFilter() 方法用于将请求和响应对象传递给过滤器链中的下一个过滤器或目标资源。
                // 即当前过滤通过
                filterChain.doFilter(servletRequest,servletResponse);
            }else {
                System.out.println("非管理员访问");
            }
        }
 
    }
}

5.内存马技术

(1)内存马原理

image-20241216162720183

(2)内存马实验

哥斯拉生成java的后门1.jsp

image-20241216163007234

用哥斯拉连接url http://localhost:8080/FilterDemo1_war_exploded/1.jsp

从而拿到shell

image-20241216163903310

二,Java-监听器Listen

1.监听器的作用:

监听ServletContext、HttpSession、ServletRequest等域对象创建和销毁事件

监听域对象的属性发生修改的事件

监听在事件发生前、发生后做一些必要的处理

监听器就是用来检测的的动作,有动作就会触发监听器里的方法,不是一定要访问路由才能触发;当与监听器关联的特定事件在Web应用中发生时,监听器会被触发

2.监听session的创造与销毁项目:

ListenSession文件

package com.example.listendemo1.listener;
 
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
 
@WebListener//@WebListener标记监听器类,无需路由
public class ListenSession implements HttpSessionListener {
 
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        //监听检测有Session创建就会执行这里
        System.out.println("监听器监听到了session创建");
    }//tomcat一启动,就会有session的产生,次函数就会被触发
 
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        //监听检测有Session销毁就会执行这里
        System.out.println("监听器监听到了session销毁");
    }
}

CSession文件

package com.example.listendemo1.Servlet;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
 
@WebServlet("/cs")
public class CSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet里面创建Session");
        //创建Session
        req.getSession();
    }
}

DSession文件

package com.example.listendemo1.Servlet;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
 
@WebServlet("/ds")
public class DSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet里面销毁Session");
        //销毁Session
        req.getSession().invalidate();
    }
}

文章参考https://blog.csdn.net/qq_61553520/article/details/136610854?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220cf987d46cb19adf9fcab25e075c7efe%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=0cf987d46cb19adf9fcab25e075c7efe&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-136610854-null-null.nonecase&utm_term=33&spm=1018.2226.3001.4450

标签:JavaEE,System,Listener,监听器,println,import,servlet,javax,out
From: https://www.cnblogs.com/sec-geek/p/18610723

相关文章

  • Day32-JavaEE应用&Servlet路由技术&UDBC&Mybatis数据库&生命周期
    一,Servlet&路由&周期1,Servlet的含义:Servlet是运行在web服务器或应用服务器上的程序,它是作为来自web浏览器或其他HTTP客户端请求和HTTP服务器上的数据库或应用程序的中间件。使用Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页2.Servl......
  • JavaEE 【知识改变命运】05 多线程(4)
    文章目录单例模式什么是单例模式饿汉模式懒汉模式多线程-懒汉模式分析多线程问题第一种添加sychronized的方式第二种添加sychronized的方式改进第二种添加sychronized的方式(DCL检查锁)阻塞队列什么是阻塞队列什么是消费生产者模型标准库中的阻塞队列消息队列应用的场景......
  • JavaEE初阶——多线程4(线程安全 和 解决办法(synchronized))
    线程不安全原因小结:1.【根本原因】操作系统上的线程是“抢占式执行”“随机调度”=>线程之间执行顺序有很多变数(罪魁祸首,万恶之源)2.代码结构:代码中,多个线程,同时,修改,同一个变量。、如果只是读取,变量的内容是固定不变的。如果是两个不同变量,彼此之间就不会产生相互覆盖......
  • 初始JavaEE篇 —— 网络原理---应用层协议
     找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程程(ಥ_ಥ)-CSDN博客所属专栏:JavaEE我们在前面简单的接触了 TCP/IP五层协议中的传输层协议,并使用UDP协议与TCP协议编写了一个简单的回显服务器与客户端。接下来,我们来深入学习应用层的协议。应用......
  • javaEE毕业设计基于ssm框架的在线考试系统的设计与实现jau62
    目录项目介绍具体实现截图开发核心技术:核心代码部分展示详细视频演示源码获取方式项目介绍在各学校的教学过程中,用户的考试是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的教室学习模式,“在线考试系......
  • javaEE毕业设计基于ssm的在线教学视频播放网站的设计与实现-r0xl4
    目录项目介绍具体实现截图开发核心技术:核心代码部分展示详细视频演示源码获取方式项目介绍在线视频网站的目的是实现满足在线视频播放、视频上传和下载等影视剧迷们对影视剧的日常需求的功能。为了达到这个目的,于是对系统提出了以下的系统功能:(1)能够在线播放视频,实......
  • 如何优化实现了ApplicationListener接口导致的onApplicationEvent方法多次调用问题?
    背景:记录一次代码优化,CreateIndex中实现ApplicationListener接口导致onApplicationEvent方法多次调用,方法里重复加载该注解的类.this.applicationContext.getBeansWithAnnotation(ESMetaData.class).排查过程:首先在服务启动run方法打断点,在springboot在加载的过程中,会......
  • 【JavaEE初阶】HTML
    ......
  • VUE-监听器(watch)解决路跳转(Router.push)以后,传递参数不更新问题
    采用router实现路由页面跳转 this.$router.push({name:/student,params:{name:'张三',age:'10',},});在/student页面获取到路由中的参数并对当前页面的参数进行更新操作 create{ this.stuName=this.$route.params.stu......
  • 深入源码解析:Spring Boot 如何加载 Servlet 、Filter 与 Listener
     我们知道,SpringBoot是在SpringMVC的基础上进行了封装,以简化开发者的工作量。尽管如此,SpringBoot的底层架构依然离不开SpringMVC的核心组件,如Servlet、Filter、Listener,以及RequestMappingHandlerMapping和RequestMappingHandlerAdapter等。 在传统的Spring......