不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式

2023-05-16

背景

对于一些对安全级别要求高的应用,可能只允许有GET和POST请求,其他请求方式需要禁用,那么可以从多个层面来进行禁用。下面从大范围禁用到小范围禁用罗列如下(假定服务容器是tomcat)

从tomcat层面禁用

从tomcat来禁用,表示tomcat中所有运行的应用都禁用这些请求方法
修改apache-tomcat/conf/web.xml,在<session-config></session-config>节点后面新增禁用配置:

<session-config>
        <session-timeout>30</session-timeout>
</session-config>
<security-constraint>
		<web-resource-collection>
			<web-resource-name>BDC</web-resource-name>
			<url-pattern>/*</url-pattern>
			<http-method>PUT</http-method>
			<http-method>DELETE</http-method>
			<http-method>HEAD</http-method>
			<http-method>TRACE</http-method>
			<http-method>OPTIONS</http-method>
		</web-resource-collection>
		<auth-constraint/>
 </security-constraint>

从应用层的web.xml中禁用

  1. 如果项目含web.xml的传统应用,按照从tomcat层禁用方式一样:
<session-config>
        <session-timeout>30</session-timeout>
</session-config>
<security-constraint>
		<web-resource-collection>
			<web-resource-name>BDC</web-resource-name>
			<url-pattern>/*</url-pattern>
			<http-method>PUT</http-method>
			<http-method>DELETE</http-method>
			<http-method>HEAD</http-method>
			<http-method>TRACE</http-method>
			<http-method>OPTIONS</http-method>
		</web-resource-collection>
		<auth-constraint/>
</security-constraint>
  1. 如果是springboot类型的应用,可以通过增加过滤器来实现,参考下面

从应用层来禁用

传统应用,首先创建一个过滤器类,一般情况可以将这种禁用的写到配置文件来管理,方便灵活修改,本次为了演示,直接用静态块初始化。

import org.apache.http.HttpStatus;
import org.apache.log4j.Logger;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class MethodFilter     implements Filter {
    private static List<String> FORBIDDEN_METHOD=new ArrayList<String>();
    static {
        FORBIDDEN_METHOD.add("PUT");
        FORBIDDEN_METHOD.add("DELETE");
        FORBIDDEN_METHOD.add("HEAD");
        FORBIDDEN_METHOD.add("TRACE");
        FORBIDDEN_METHOD.add("OPTIONS");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        String method=httpRequest.getMethod();
        if(FORBIDDEN_METHOD.contains(method)){
            ((HttpServletResponse) response).setStatus(HttpStatus.SC_FORBIDDEN);
            return;
        }

        chain.doFilter(request, response);
    }


    @Override
    public void init(FilterConfig filterConfig)
            throws ServletException {
    }

    @Override
    public void destroy() {
    }

}

springboot应用类似,核心逻辑都一样。

通过以上几种方式,可以实现不同粒度的禁用某些HTTP请求方法,在应用层面禁用可以更灵活的根据特定的场景来禁用,在应用的web.xml根据特定的url来禁用,在tomcat或jboss层面可以粗粒度的禁用所有应用

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

不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式 的相关文章

  • PowerShell Tee-Object 未捕获文件中的调试行

    我有一个通过自动化运行的 PowerShell 脚本 因此我需要将脚本的输出捕获到文件中 但我还想捕获运行的命令 为输出提供一些上下文 我会使用set x在 Linux shell 脚本中 不过 我不知道如何将这些命令捕获到 Windows
  • CORS xmlhttprequest HEAD 方法

    当使用 CORS 对象的 HEAD 方法请求标头数据时 它返回 null getAllResponseHeaders gt 返回 null 如何在其他站点中设置 php 标头 以便我可以检索标头数据 gt p s 这不在同一域内 这是跨源资
  • 使用 C 的原始 libcurl JSON PUT 请求

    我目前正在编写一个类似 REST 的客户端 只需要执行 PUT 请求 Problem 运行该程序并没有在 URL 的 API 上给出正确的结果 我不知道为什么 使用curl easy perform curl 在调用时不会抛出错误 但 UR
  • git重置后未暂存的文件消失了--hard

    我尝试过git reset hard HEAD n from git reflog我丢失了当前未暂存文件的所有内容 未暂存的文件是最后一个git add我做到了 在那之前我尝试过git reset到最后git commit 我所有的文件都消
  • 跟踪 Erlang 中从邮箱消费消息的操作

    我浏览了文档trace 3Erlang 中的 BIF 然而 我的一个观察结果是它不能用于跟踪邮箱中消息的使用情况 旗帜 receive 仅跟踪消息何时添加到进程的邮箱 有没有一种方法可以跟踪事件 例如使用receive构造 如果不是 是否有
  • tkinter 变量跟踪方法

    我试图在用户在 tkinter 输入框中输入内容时激活回调函数 根据effbot org http effbot org tkinterbook variable htm 您可以使用trace方法将 观察者 回调附加到 多变的 每当内容更改
  • 如何使用 Mercurial 自动合并 2 个头

    我们刚刚从 subversion 切换到 Mercurial 有一件事比预期花费了更多的时间 合并头 我们喜欢这样一个事实 它使合并独立于 2 个提交 与 subversion 相比 但我们最终会定期合并 2 个头以进行不相关的更改 简单的
  • C# HttpClient PUT

    由于某种原因 我的下面的代码曾经可以工作 现在却引发了一个异常 public static async Task
  • Trace Bug 仅在 CI 中偶尔发生

    我在 python 代码中有一个奇怪的错误 这种错误只在 CI 中有时发生 我们无法重现它 测试代码在哪里 response self admin client post url post self assertEqual 200 resp
  • 如何将 /usr/bin/env perl 功能与 perl 参数一起使用?

    我有一个 perl 脚本 shebang 为 usr bin env perl 我希望这个脚本在执行时打印每一行 所以我安装了 Devel Trace 并将脚本 shebang 更改为 usr bin env perl d Trace 但这
  • ltrace(库跟踪工具)如何工作?

    如何ltrace https www man7 org linux man pages man1 ltrace 1 html work 它如何找出程序调用了哪些库函数 是否存在所有对库函数的调用都经过的公共代码路径 或许ltrace在这个公
  • hadoop fs -put 命令

    我使用Cloudera CDH存储库在CentOS上构建了单节点Hadoop环境 当我想将本地文件复制到HDFS时 我使用了命令 sudo u hdfs hadoop fs put root MyHadoop file1 txt 但是 结果
  • 如何在Release模式下启用TRACE宏?

    The 跟踪宏 http msdn microsoft com en us library 4wyz8787 VS 80 aspx可用于在代码编译时向调试器输出诊断消息Debug模式 我在的时候需要同样的信息Release模式 有办法实现这
  • 对 Azure 存储 [REST][Azure Blob] 中的 PUT Blob 的 REST api 调用身份验证失败

    我正在尝试发出 PUT 请求来创建 Azure Blob 但它显示身份验证失败 我认为我在制定资源字符串或标题时犯了一些错误 这是代码 const CryptoJS require crypto js const request requi
  • WinDbg——TraceListener 和饱和线程池

    我有一个多线程 NET Windows 服务 它间歇性地挂起 可能每两周 24 7 运行一次 当发生挂起时 线程池完全饱和 因为对我们的自定义跟踪侦听器的调用由于某种原因开始阻塞 根据 Windbg 的说法 有问题的代码中没有任何锁 也没有
  • 如何向 Traefik 添加唯一的请求 ID 标头

    在Traefik中 是否可以为请求添加唯一的Request ID标头 我希望能够将访问日志与后端服务的日志关联起来 AFAIK 不支持它 但是 Traefik 2 3 6 中有一个功能解决方法 static config tracing W
  • jQuery ajax 删除 url 上的整数

    我正在使用这些数据 Pulled from the button that was hit var method document activeElement getAttribute method toUpperCase var url
  • 使用 pytest 运行trace.py

    我正在尝试使用trace py跑步时pytest 我知道pytest有自己的覆盖率插件pytest cov但限制 每行执行的次数不可用 不允许我现在使用它 同样对于coverage py 我正在尝试这个命令 python3 4 m trac
  • github API - 使用curl PUT 将存储库添加到团队

    我正在尝试向 github 上的团队添加一个存储库 因此 curl i u username password X PUT d https api github com teams team repos user repo 具体内容省略 几
  • C 基本头命令

    我正在尝试为我的编程课从 Linux 重新创建 head 和 tail 命令 我们刚刚开始使用 C 所以我对分配内存和指针的想法很陌生 我想知道为什么这不起作用 include

随机推荐

  • 回收销毁,IT界头条2022年7月7日版

    2022年7月 7日 1 关于构建数据基础制度更好发挥数据要素作用的意见 审议通过 2 微软在新报告中揭示了俄乌冲突期间的网络战细节 3 西北工业大学遭受境外网络攻击 xff0c 西安警方已立案侦查 4 立陶宛对俄罗斯 禁运 后遭网络攻击
  • 数据安全与销毁:数据安全已经上升到了国家战略层面

    日前 xff0c 中央全面深化改革委员会审议通过了 关于构建数据基础制度更好发挥数据要素作用的意见 xff08 下称 意见 xff09 xff0c 明确提出 把安全贯穿数据治理全过程 业内专家表示 xff0c 数据安全已经上升到了国家战略层
  • C++用带有默认参数的函数实现,求2个或3个正整数中的最大数

    1 题目要求如下 xff1a C 43 43 用带有默认参数的函数实现 xff0c 求2个或3个正整数中的最大数 2 来吧 xff0c 展示 xff1a include lt iostream gt using namespace std
  • 程序设计思维与实践 Week2 作业B "倒水问题"

    数据 xff1a Sample Input xff1a 2 7 5 2 7 4 Sample Output xff1a fill B pour B A success fill A pour A B fill A pour A B succ
  • armbian的换源

    安装好armbian和众多Linux一样 xff0c 最重要的就是把原来的官方源给替换掉 xff0c 换成国内的源 xff0c 当然个人建议还是把官方的源备份一下以防出错 cp etc apt sources list etc apt so
  • Ubuntu18.04上网断断续续

    刚刚体验了一把Ubuntu18 04 LTS xff0c 有个小问题就是 xff0c 网络链接老是断断续续 后来在这里找到了解决方法 xff1a span class hljs built in sudo span gedit etc pp
  • Coursera Machine Learning 第二周 quiz Octave/Matlab Tutorial 习题答案

    1 Suppose I first execute the following Octave Matlab commands 1 2
  • C语言random问题

    总 结一下C语言random的用法 xff1a srand xff08 xff08 int xff09 time xff08 NULL xff09 xff09 用于设定随机数种子 rand 100 xff0c 产生 0 99 的随机数 如果
  • java.util.regex.PatternSyntaxException

    在处理字符串用到String replaceAll 这个方法的时候出现了这个异常 Exception in thread 34 main 34 java util regex PatternSyntaxException Dangling
  • Shell 脚本 Debug 方法

    可能有的程序员在对程序调试的时候用printf或者echo将信息挨条打印出来 xff0c 但是这比较麻烦 xff0c 因为在交付的时候还要将这些语句一条条删除 xff0c 下面对shell debug的方法稍微做一个总结 xff1a 1 使
  • JAVA 点击按钮展开一个新的Jpanel

    问题不太容易用语言来描述 xff0c 先直接上图吧 xff1a 点击按钮之前 xff1a 点击按钮之后 xff1a 那么如何实现这种功能呢 xff1f 首先在图一中的主JFrame中添加一个JScrollPane xff0c 在点击按钮后n
  • java 实现日历选择器

    首先引用com qt datapicker DatePicker 包实现如下 xff1a package Date import java awt event ActionEvent import java awt event Action
  • 获取JPasswordField组件中的密码

    在JTextField中有一个方法getText xff0c 可以返回组件中输入的字符串 xff0c 但是对于JPasswordField类 xff0c getText 方法已经不适用了 xff0c 执意使用的话 xff0c 获取的也是一串
  • 指针的大小

    说这个之前先了解几个概念 xff1a 字长 xff1a 字长是CPU的主要技术指标之一 xff0c 指的是CPU一次能并行处理的二进制的位数 xff0c 字长是8的整倍数 xff0c 通常的PC机的字长为16位 xff0c 32位 xff0
  • 程序设计思维与实践 Week6 作业A氪金带东树的直径的应用

    题意 xff1a 依次输入图中的点以及边权等信息 xff0c 最后输出每个点在图中所能到达的最远的路线的长度 例如所给的样例 xff1a input 输入文件包含多组测试数据 对于每组测试数据 xff0c 第一行一个整数N N lt 61
  • 《UNIX环境高级编程》(第二版)找不到apue.h问题

    UNIX环境高级编程 xff08 第二版 xff09 这本书 xff0c 实例程序中都包含头文件apue h xff0c 寻找linux usr include中 xff0c 缺找不到此头文件 xff0c 因此编译时会出错 实际上apue
  • java程序中,如何安全的结束一个正在运行的线程?

    如何停止java的线程一直是一个开发多线程程序常遇到的一个问题 在Java的多线程编程中 xff0c java lang Thread类型包含了一些列的方法start stop stop Throwable and suspend dest
  • RoboMaster视觉教程(1)摄像头

    观文有感 之 RoboMaster视觉教程 xff08 1 xff09 摄像头 闲来垂钓碧溪上 今天钓到一篇RM视觉摄像头的好文 xff0c 记录一下笔记 xff1a 文章目录 观文有感 之 RoboMaster视觉教程 xff08 1 x
  • 如何成为一名很酷的机器人工程师

    观文有感 之 如何成为一名很酷的机器人工程师 闲来垂钓碧溪上 今天来钓一波职业规划 xff0c 记录一下笔记 xff08 特别注意 xff1a 本文中大部分内容是复制粘贴的 xff0c 只有少数位置的删改和整理 xff0c 目的是分享一下大
  • 不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式

    背景 对于一些对安全级别要求高的应用 xff0c 可能只允许有GET和POST请求 xff0c 其他请求方式需要禁用 xff0c 那么可以从多个层面来进行禁用 下面从大范围禁用到小范围禁用罗列如下 xff08 假定服务容器是tomcat x