代码审计—SpringBoot Filter加载顺序

编程入门 行业动态 更新时间:2024-10-20 05:35:49

代码审计—SpringBoot Filter加载<a href=https://www.elefans.com/category/jswz/34/1771364.html style=顺序"/>

代码审计—SpringBoot Filter加载顺序

0x00 前言

代码审计中,如果遇到了SpringBoot,Filter的执行顺序肯定是至关重要的,所以本节来看一下SpringBoot的Filter加载顺序。

0x01 加载顺序

这里先来看一个Demo

package com.cms.config;import com.cms.filter.PageCacheFilter;
import com.cms.filter.PermissionFilter;
import com.cms.filter.UrlFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Autowiredprivate PageCacheFilter pageCacheFilter;@Autowiredprivate PermissionFilter permissionFilter;@Autowiredprivate UrlFilter urlFilter;@Beanpublic FilterRegistrationBean registerPageCacheFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(pageCacheFilter);registration.addUrlPatterns("/*");registration.setName("pageCacheFilter");registration.addInitParameter("cacheName","PageCacheFilter");registration.setOrder(1);return registration;}@Beanpublic FilterRegistrationBean registerPermissionFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(permissionFilter);registration.addUrlPatterns("/admin/*");registration.setName("permissionFilter");registration.setOrder(2);return registration;}@Beanpublic FilterRegistrationBean registerUrlFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(urlFilter);registration.addUrlPatterns("/*");registration.setName("urlFilter");registration.setOrder(3);return registration;}}

@Configuration注解表示告诉SpringBoot这是一个配置类。

@Autowired注解表示会自动生成封装方法。

@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。

FilterRegistrationBean 这个类的主要作用就是用来注册filter的优先级的,registration.setOrder(1),这里的数字越小代表filter的优先级越高。

        registration.setFilter(pageCacheFilter);# 注册的路径registration.addUrlPatterns("/*");# 注册的filterregistration.setName("pageCacheFilter");# 不需要过滤的filterregistration.addInitParameter("cacheName","PageCacheFilter");# 优先级registration.setOrder(1);

补充知识

SpringBoot

Spring Boot 是一款轻量级的开源 Java 框架,它基于 Spring 框架,为开发 Spring 应用程序提供了快速、简便的方式。Spring Boot 可以自动配置 Spring 应用程序和 Spring 应用程序的依赖项,从而减少了配置文件和样板代码的编写。它还提供了各种各样的插件和库,如数据库访问、Web 开发、安全性等。与传统的 Spring 应用程序相比,Spring Boot 的最大优势在于它可以快速启动,从而加速应用程序的部署和开发过程。

Filter

Spring Boot Filter 是 Spring 框架中的一种机制,它是用于在 Web 应用中对请求和响应进行拦截或过滤处理的组件。它为开发者提供了一种灵活的方式来对请求和响应进行处理,可以在请求进入控制器之前对请求进行一些必要的处理,或在响应返回给客户端之前对响应进行一些必要的修改或补充操作。通过配置 Filter,开发者可以实现对请求参数的验证、对请求进行安全验证、对响应进行加密解密等操作,从而提高了 Web 应用的安全性和可靠性。

在 Spring Boot 中,开发者可以通过实现 Filter 接口或继承 Filter 抽象类来编写自己的 Filter,然后通过配置 FilterRegistrationBean 对 Filter 进行注册和启用。同时,Spring Boot 还提供了一些内置的 Filter,如 CharacterEncodingFilter、HiddenHttpMethodFilter 等,可以直接使用。

代码审计学习方法

以下是代码审计学习的方法:

  1. 学习编程语言:了解不同编程语言的语法和基本语句是很重要的,这有助于理解代码的构造。

  2. 学习漏洞类型:了解最常见的漏洞类型(如SQL注入、跨站脚本攻击、文件包含)是必要的,这样可以帮助你更快地识别和定位漏洞。

  3. 使用工具:有些工具可以帮助你快速分析代码,例如静态代码分析工具(如Fortify、FindBugs、Checkmarx等)或动态分析工具(如Burp Suite、OWASP ZAP等)。这些工具可以自动检测是否存在常见的漏洞。

  4. 阅读安全资源:阅读安全论坛、安全博客、安全杂志等都会对你的知识汇聚有所帮助,可以了解最新的漏洞和攻击技术。

  5. 编写代码:编写自己的代码可以增加对编程语言和其中的漏洞类型的理解,同时当你自己编写代码时,也能帮助你更好地理解其他人的代码。

  6. 实践:最好的学习方法是实践,尝试在一些CTF比赛或渗透测试实践中寻找漏洞可以帮助你更好地理解代码审计。

更多推荐

代码审计—SpringBoot Filter加载顺序

本文发布于:2023-11-15 06:11:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1595031.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:顺序   加载   代码   Filter   SpringBoot

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!