使用http动词篡改的认证旁路

2023-11-16


提示:以下是本篇文章正文内容,下面案例可供参考

一、漏洞描述

在这里插入图片描述

可能会升级用户特权并通过 Web 应用程序获取管理许可权可能会收集有关 Web 应用程序的敏感信息,如用户名、密码、机器名和/或敏感文件位置。
测试结果似乎指示存在脆弱性,因为“测试响应”与“原始响应”完全相同,这表明动词篡改能够绕过站点认证。

二、解决建议

增加拦截器,判断请求方式是否合法,合法则放行。

三、解决方法

Springboot 配置文件增加配置

# 信息安全
security:
  #http请求方式配置
  http:
    #是否开启(开启:true 关闭:false)
    enable: false
    #允许的请求方式
    allow:
      - POST
      - GET

编写配置类

/**
 * @author wcs
 * @desccription: 安全配置类
 * @Date: 14:13 2022/2/28
 */
@Component
@Configuration
@ConfigurationProperties(prefix = "security")
public class SecurityConfig implements InitializingBean, DisposableBean {


    private static Logger logger = LoggerFactory.getLogger(AspctConfig.class);
    

    /**
     * http防篡改
     */
    private HttpConfig http;

    /**
     * xss攻击
     */
    private XssConfig xss;

    public HttpConfig getHttp() {
        return http;
    }

    public void setHttp(HttpConfig http) {
        this.http = http;
    }

    public XssConfig getXss() {
        return xss;
    }

    public void setXss(XssConfig xss) {
        this.xss = xss;
    }

    @Override
    public void destroy() throws Exception {

    }

    @Override
    public void afterPropertiesSet() throws Exception {

    }

    /**
     * 实例化Http过滤器
     *
     * @return
     */
    @Bean
    @ConditionalOnProperty(prefix = "security", name = "http.enable", havingValue = "true")
    public FilterRegistrationBean httpFilterRegistration() {
        logger.info("hhtp过滤器初始化");
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setName("httpFilter");
        registration.setOrder(3);
        registration.addUrlPatterns("/*");
        registration.setFilter(new HttpFilter());
        return registration;
    }
}


/**
 * @author wcs
 * @desccription: Http请求方式配置类
 * @Date: 19:30 2022/2/28
 */
public class HttpConfig {

    /**
     * 是否启用
     */
    private boolean enable;

    /**
     * 忽略的URL
     */
    private List<String> allow;


    public boolean isEnable() {
        return enable;
    }

    public void setEnable(boolean enable) {
        this.enable = enable;
    }

    public List<String> getAllow() {
        return allow;
    }

    public void setAllow(List<String> allow) {
        this.allow = allow;
    }
}

编写过滤器

/**
 * @author wcs 防止http 篡改过滤器
 * @desccription:
 * @Date: 19:03 2022/2/28
 */
public class HttpFilter implements Filter {


    private static Logger LOGGER = LoggerFactory.getLogger(CsrfFilter.class);
    /**
     * 过滤器配置对象
     */
    FilterConfig filterConfig = null;

    private SecurityConfig security;


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        security = SpringUtils.getBean(SecurityConfig.class);
        this.filterConfig = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String method = request.getMethod();
        if (isExcludeMethod(method)) {
            filterChain.doFilter(servletRequest, servletResponse);
            return;
        } else {
            servletResponse.setContentType("application/json; charset=UTF-8");
            servletResponse.getWriter().write(JacksonUtil.writeValueAsString(new ReturnT<>(ReturnT.FAIL_CODE, "不支持的请求方式!")));
            LOGGER.error("不支持的请求方式", method);
        }
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }

    /**
     * 判断是否为忽略的URL
     *
     * @param method URL路径
     * @return true-忽略,false-过滤
     */
    private boolean isExcludeMethod(String method) {
        if (security.getHttp().getAllow() == null || security.getHttp().getAllow().isEmpty()) {
            return false;
        }
        return security.getHttp().getAllow().stream().map(pattern -> Pattern.compile("^" + pattern)).map(p -> p.matcher(method))
                .anyMatch(Matcher::find);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用http动词篡改的认证旁路 的相关文章

随机推荐

  • 线段树(单点修改+区间查询)(区间修改+区间查询)

    什么是线段树 线段树 是一种二叉搜索树 它将一段区间划分为若干单位区间 每一个节点都储存着一个区间 它功能强大 支持区间求和 区间最大值 区间修改 单点修改等操作 线段树的思想和分治思想很相像 线段树的每一个节点都储存着一段区间 L R 的
  • (三)Fabric2.0启动网络脚本配置剖析

    总目录 0 如何利用区块链保护知识产权 一 HyperLedger Fabric 2 0 release测试网络部署 二 Fabric2 0 first network 生成配置说明 三 Fabric2 0启动网络脚本配置剖析 四 Fabr
  • 初识MySQL(一)

    目录 一 初识MySQL数据库 Database 1 1 为什么要有数据库 1 2 关于数据库的大体分类 二 数据库的操作 2 1 如何创建一个库 2 1 1 SQL方式 2 1 2 图形化界面方式 My SQL Workbench 2 2
  • python socket基于TCP/IP协议实现多人聊天室

    文章目录 前言 一 实现原理 二 queue队列 三 代码实现 四 需要注意的地方 五 总结 前言 所谓套接字 Socket 就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象 一个套接字就是网络上进程通信的一端 提供了应用层进程
  • Vue简单示例——weex跨平台解决方案

    简单介绍 Weex的出现主要解决了Web开发的应用频繁发布版本和多端研发两个问题 同时解决了前端语言性能差异和显示效果受限的问题 什么是weex Weex是使用流行的Web开发体验来开发高性能原生应用框架 使开发者可以用JS语言和前端开发经
  • H264/AVC-帧内预测

    I宏块使用帧内预测编码压缩数据 根据相邻宏块数据恢复当前宏块信息 值得注意的一点是 帧内预测所参考的相邻宏块数据是deblocking之前的像素值 因为上一宏块的deblocking依赖当前宏块像素值 但当前宏块数据还未重建 1 帧内预测类
  • Python 综合面试题(附参考答案)

    Python 综合面试题 第一部分 Python 基础 如何理解 python 中的深度拷贝和浅拷贝 浅拷贝旨在减少内存的占用 深拷贝可以在做数据的清洗 修改或者入库 的时候 对原数据进行复制一份 以防数据修改之后 找不到原数据 深浅拷 贝
  • PID算法与PID自整定算法

    本文是由于研发恒温槽项目故需要了解PID控制算法和PID自整定算法 为方便本人日后需要故作此记录 直接粘贴代码吧 这是PID位置式控温算法 函数名 void Pid positional float speed 用途 PID输出 说明 参数
  • 手撕代码:判断二进制串除以3的余数

    题目描述 给定一个长二进制串 求其除以3的余数 思路分析 这里涉及到状态机 由于除以三的余数只可能是0 1 2 所以状态机就有三个状态 现在逐个遍历二进制串 初始余数为0 当遇到1时 状态转到1 遇到0时状态仍为0 对于状态1 判断分别遇到
  • win8 java 32位_java8离线安装包32位 官方最新版

    java8电脑版安装包是一款全新的java编程软件 该软件有着良好的操作性 支持多语种编程 当然也包括中文编程 支持winxp win7 win8 win10等基本微软系统进行操作 全面升级现有Java编程模式 带来一项协同开发的JVM J
  • Opencv.js+Hbuilder快速打造一个图像处理App

    一 开发工具简介 1 Opencv js Opencv 是一个常见的图像处理库 通常使用C 和python去调这个库对图像 视频流进行处理 而js版的opencv可以进一步丰富前端对于图像的处理 目前opencv js版映入了与其他版本基本
  • 安信实验室教你如何实现Windows自动安装!

    用户接入硬件后 Windows 自动下载安装或更新厂商的驱动软件 特点 1 产品的驱动程序及软件已放入微软官方驱动程序库 全世界用户都可以很快捷和方便地自动安装厂商自定义的软件 驱动通过微软官方认证 最佳安全性保障和信用背书 应用软件可以自
  • adb shell dumpsys activity activities调用信息简析

    活动栈 通过执行上面命令 可以得到类似如下格式的信息 Stack 45 type standard mode fullscreen isSleeping false mBounds Rect 0 0 0 0 Stack 0 type hom
  • Python 重命名文件或目录(os.rename)

    文章目录 1 概述 2 语法 os rename 2 1 相对路径 2 2 绝对路径 3 扩展 3 1 os 模块详解 1 概述 mermaid svg 9u1Lg7aqBXqPfILR label font family trebuche
  • Python面试常见的30个问题及答案

    Python面试问题 问题1 Python的主要功能是什么 python特性如下 解释型 动态类型 面向对象 简洁明了 免费自由 有一个庞大的社区 Q 2 区分深层和浅层拷贝 深拷贝将对象复制到另一个对象中 这意味着如果您对对象的副本进行更
  • vue-resource的$http.jsonp方法例子

    div class box div
  • svn版本回退

    SVN版本回退 当一不小心把文件改错了或者误删除了文件并提交到了服务器 我们要取消这些修改的话 首先就是将这个文件还原到上一个修订的版本的内容 revert to this rebision 然后将这个文件重新提交 那么服务器上的这个文件就
  • 集成开发工具使用

    集成开发工具使用 Intellij IDEA介绍 下载 安装 IDEA开发Java项目 IDEA快捷键 IDEA常见配置和操作的学习 1 IDEA 1 1 IDEA概述 IDEA全称Intellij IDEA 是用于Java语言开发的集成环
  • Windows Server 2016-OU组织单位日常操作

    技术无所谓贵贱 既然曾经做过就总该是要留下点什么 毕竟做技术这些年给我们留下太多太多的成长经历 总有人问这些已经很皮毛了为什么还要写 其实没那么多花哨理由 就是想着做或者不做这一块总是要对过往做个简单归总 习惯已成自然 虽然因为种种原因频繁
  • 使用http动词篡改的认证旁路

    文章目录 一 漏洞描述 二 解决建议 三 解决方法 Springboot 配置文件增加配置 编写配置类 编写过滤器 提示 以下是本篇文章正文内容 下面案例可供参考 一 漏洞描述 可能会升级用户特权并通过 Web 应用程序获取管理许可权可能会