禁用WebDAV-tomcat
由於要處理一份關於公司的一個公眾用戶網站安全掃描中可能存在的安全性問題。需要禁用WebDAV,或者說是對http中的一些方法的禁用。
WebDAV (Web-based Distributed Authoring and Versioning) 一種基於 HTTP 1.1協議的通信協議.它擴展了HTTP 1.1,在GET、POST、HEAD等幾個HTTP標準方法以外添加了一些新的方法,使應用程序可直接對Web Server直接讀寫,並支持寫文件鎖定(Locking)及解鎖(Unlock),還可以支持文件的版本控製。
HTTP/1.1協議中共定義了八種方法(有時也叫“動作”)來表明Request-URI指定的資源的不同操作方式:
OPTIONS 返回服務器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務器發送'*'的請求來測試服務器的功能性。
HEAD 向服務器索要與GET請求相一致的響應,隻不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息。
GET 向特定的資源發出請求。注意:GET方法不應當被用於產生“副作用”的操作中,例如在web app.中。其中一個原因是GET可能會被網絡蜘蛛等隨意訪問。
POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
PUT 向指定資源位置上傳其最新內容。
DELETE 請求服務器刪除Request-URI所標識的資源。
TRACE 回顯服務器收到的請求,主要用於測試或診斷。
CONNECT HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。
方法名稱是區分大小寫的。當某個請求所針對的資源不支持對應的請求方法的時候,服務器應當返回狀態碼405(Method Not Allowed);當服務器不認識或者不支持對應的請求方法的時候,應當返回狀態碼501(Not Implemented)。
HTTP服務器至少應該實現GET和HEAD方法,其他方法都是可選的。當然,所有的方法支持的實現都應當符合下述的方法各自的語義定義。此外,除了上述方法,特定的HTTP服務器還能夠擴展自定義的方法。
http的訪問中,一般常用的兩個方法是:GET和POST。其實主要是針對DELETE等方法的禁用。有兩種方式:
一、修改應用中的web.xml:
第一步:修改web-app協議
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://java.sun.com/xml/ns/j2ee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
第二部:在應用程序的web.xml中添加如下的代碼即可
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
也可以把GET和POST也加上測試效果。
二、修改tomcat中conf下的web.xml
步驟同上。
修改應用中的web.xml就隻針對本應用起作用,修改tomcat中的web.xml就可以對啟動在該tomcat下所有的應用起作用。
在未限製DELETE等方法前(即未做上述web.xml的內容的添加之前),測試http的DELETE方法的效果,方式如下:
第一步:
在Tomcat的web.xml 文件中配置org.apache.catalina.servlets.DefaultServlet的初始化參數
- <init-param>
- <param-name>readonly</param-name>
- <param-value>false</param-value>
- </init-param>
readonly參數默認是true,即不允許delete和put操作,所以默認的通過XMLHttpRequest對象的put或者delete方法訪問就會報告 http 403 forbidden 錯誤。
第二步:
從客戶端通過 Ajax XMLHTTPRequest 發起 DELETE/PUT 請求,利用AJAX的方式調用DELETE,
- <script type="text/javascript">
- function getXMLHTTPRequest(){
- if (XMLHttpRequest) {
- return new XMLHttpRequest();
- } else {
- try{
- return new ActiveXObject('Msxml2.XMLHTTP');
- }catch(e){
- return new ActiveXObject('Microsoft.XMLHTTP');
- }
- }
- }
- var req = getXMLHTTPRequest();
- req.open('DELETE','https://localhost:8080/yours_web/test.html',false);
- req.send(null);
- document.write(req.responseText);
- </script>
document.write(req.responseText);這一句既是調用了Ajax,也是將刪除的test.html返回回來,如果刪除成功,那麼應該看到的是404的效果。
另外對於web.xml配置參數的說明可參考:
https://www.blogjava.net/baoyaer/articles/107428.html
對於http深入了解可以參考:
https://blog.csdn.net/lyq5655779/article/details/7515284
最後更新:2017-04-03 16:48:56