2014-05-01 14 views
0

我寫了一個春天的web應用程序。除了一件事以外,非常穩固。應用程序返回一個HTTP OPTIONS請求,其響應是「允許:GET,HEAD,POST,PUT,DELETE,OPTIONS」但事實並非如此,只允許GET和POST。其他操作(GET和POST除外)返回「操作不支持」錯誤405和服務器名稱和版本等。安全團隊不喜歡服務器的所有詳細信息都返回「不支持」錯誤消息的事實。Spring框架:HTTP選項返回所有方法(獲取,放置,發佈,刪除,跟蹤,頭,選項)

我花了很多時間試圖覆蓋該錯誤頁面或引入405的自定義錯誤頁面......但我沒有成功。 我花了整整一天的時間嘗試禁用HTTP選項。沒有成功。 只是一個細節,我跑捲曲語句來測試:

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可能會忽略它們或者不提供關於我的服務器的內部信息。

謝謝

回答

3

你可以註冊並使用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> 
+0

非常感謝!你讓我今天很開心。除了OPTIONS之外,它對所有操作都很完美。對於選擇我不得不添加到web.xml中有以下 \t​​dispatchOptionsRequest \t 真正的 \t和它的工作般的魅力。你搖滾! – Rose

+0

而在myInterceptor.java而不是默認的Forbidden頁面,它給出了一些服務器信息,我剛剛創建了一個405.htm頁面併發送response.sendredirect()到如下所示的頁面:response.sendRedirect(「405.htm」) ; – Rose

+0

非常好,我很高興看到一切都已經解決。 –