一尘不染

Spring框架:HTTP OPTIONS返回所有方法(获取,放置,发布,删除,跟踪,开头,选项)

tomcat

我写了一个Spring Web应用程序。除了一件事,它非常坚固。该应用程序返回一个HTTP
OPTIONS请求,其响应为“允许:GET,HEAD,POST,PUT,DELETE,OPTIONS”,但事实并非如此,仅允许GET和POST。其他操作(GET和POST除外)返回“不支持操作”错误405和服务器名称和版本…等。安全团队不喜欢服务器的所有详细信息都返回“不支持”错误消息这一事实。

我花了很多时间试图覆盖该错误页面或为405引入自定义错误页面…但是我没有成功。我整天都在尝试禁用HTTP
OPTIONS。没有成功。只是一个细节,我运行curl语句进行测试:

curl "http://localhost:8080/webappX/welcome.htm" -X PUT -v

我的应用返回:

HTTP Status 405 - Request method 'PUT' not supported
Tomcat/6.0...etc

由于此数据(tomcat版本,服务器信息和响应元数据)可能会用于安全攻击,因此如何创建一个自定义405页来隐藏我的服务器的详细信息并给出一个非常小的错误页?或者如何禁用PUT,DELETE,TRACE,OPTIONS,HEAD,以便Tomcat可能会忽略它们或不提供有关服务器的内部信息。

谢谢


阅读 591

收藏
2020-06-16

共1个答案

一尘不染

您可以注册并使用Interceptor捕获所有对应用程序的请求的方法,如果该方法不是GET /
POST,则只需重定向到您选择的错误页面/发送错误响应即可。

public class MyInterceptor extends HandlerInterceptorAdapter{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        if (!request.getMethod().equalsIgnoreCase("POST") && !request.getMethod().equalsIgnoreCase("GET")) {
            // Not a POST/GET - send error and return false
            response.sendError(HttpServletResponse.SC_FORBIDDEN, "Unauthorized Request");
            return false;
        } else {
            return true;
        }
    }


}

要注册拦截器,请将其添加到您的spring xml配置文件中

<mvc:interceptors>
<mvc:interceptor>
    <mvc:mapping path="/**" />
    <bean class="your.package.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
2020-06-16