91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣避免Manager應用被人利用

發布時間:2021-12-21 11:48:29 來源:億速云 閱讀:129 作者:柒染 欄目:大數據

怎樣避免Manager應用被人利用,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

使用Tomcat時,你一定發現Tomcat的webapps目錄中自帶了許多的應用,有演示特性與樣例的,有進行應用管理的等等,這其中就包含Manager應用。

我們前面的文章曾經分析過Manager應用的內部實現,具體可以移步這里查看:

深入Tomcat的Manager

在Tomcat的manager應用的META-INF/context.xml中,有這樣一行注釋:

  <!--

  Remove the comment markers from around the Valve below to limit access to

  the manager application to clients connecting from localhost

  -->

  <!--

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"

  allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

  -->

在Tomcat的郵件組里剛好有人也在問這個問題。提問者說有人在猜他的管理員密碼,想通過這個,登錄到Manager應用。而Manager應用可以直接控制容器內應用的生命周期,可以直接進行Tomcat內應用的啟動停止和解部署等,還是很危險的。

通過上面的context.xml中的配置,可以限制只有本地才能訪問manager應用,這樣除非你的主機被hack掉,否則manager應用還是不會被直接利用的。

這樣就解決了Manager應用被非法利用的危險。

下面我們來深入源碼,來了解下Tomcat內部是如何進行處理來實現的該功能。

通過上面的配置內容,我們能看出,實現的本質是基于Tomcat的Valve組件來進行請求的過濾處理的。關于Valve之前也曾寫過內容:

Tomcat的AccessLogValve介紹

而本次在RemoteAddrValve中,調用的invoke方法注釋是這樣寫的:

/**
* Extract the desired request property, and pass it (along with the
* specified request and response objects) to the protected
* <code>process()</code> method to perform the actual filtering.
* This method must be implemented by a concrete subclass.
*/

也就是解析出需要的參數,傳到process方法中。這個方法是其父類

RequestFilterValve的方法,傳入的參數是request中的遠程請求地址:

request.getRequest().getRemoteAddr();

再看process方法,內容如下:

void process(String property, Request request, Response response) {

   if (isAllowed(property)) {
       getNext().invoke(request, response);
       return;
   }
   // Deny this request
   denyRequest(request, response);
}

基本邏輯類于我們常說的黑名單白名單。可以配置哪些是允許的,哪些是禁止的。

再翻到上面看Manager應用的配置,是配置了allow屬性,設置了允許的請求地址,其它不在此范圍的請求都會被拒絕。

isAllow方法,在判斷時使用java.util.regex進行正則的判斷。首先是根據配置的是allow還是deny進行具體的property解析和匹配。

public boolean isAllowed(String property) {
   // Use local copies for thread safety
   Pattern deny = this.deny;
   Pattern allow = this.allow;
   // Check the deny patterns, if any
   if (deny != null && deny.matcher(property).matches()) {
       return false;
   }
   // Check the allow patterns, if any
   if (allow != null && allow.matcher(property).matches()) {
       return true;
   }
   // Allow if denies specified but not allows
   if (deny != null && allow == null) {
       return true;
   }
   // Deny this request
   return false;
}

對于RemoteFilterValve,在官方文檔還有這樣一個樣例,可以在拒絕請求招待時,跳轉到指定的端口。

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

   addConnectorPort="true"

   allow="127\.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*|.*;8443"/>

通過分號進行分隔,后面跟上跳轉的端口。

與RemoteAddrValve類似的,Tomcat還提供了一個RemoteHostValve,可以進行遠程主機的過濾,配置與功能與我們上面的介紹基本一致。

Tomcat內置了豐富的Valve,可以進行多種情形下的應用。

和Tomcat學設計模式 | Facade模式與請求處理

關于怎樣避免Manager應用被人利用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永兴县| 晋城| 远安县| 龙海市| 秦安县| 孟连| 红原县| 平山县| 临泽县| 三原县| 慈利县| 当涂县| 库车县| 安仁县| 河东区| 喜德县| 奈曼旗| 金门县| 大关县| 沙田区| 桦南县| 新野县| 云南省| 同德县| 长治市| 苍南县| 靖安县| 茂名市| 屏山县| 三亚市| 清水河县| 五大连池市| 阜城县| 清流县| 饶河县| 乳源| 泾阳县| 漳平市| 定州市| 信宜市| 苏尼特左旗|