WebDAV-tomcat 安全請求問題

WebDAV-tomcat

 

  1. 需求

由於網站安全掃描中可能存在的安全性問題。需要禁用WebDAV,或者說是對http中的一些方法的禁用。

     2.問題復顯

在未限制DELETE等方法前(即未做上述web.xml的內容的添加之前),測試httpDELETE方法的效果,方式如下:

第一步:

Tomcatweb.xml 文件中配置org.apache.catalina.servlets.DefaultServlet的初始化參數

<init-param> 

    <param-name>readonly</param-name> 

    <param-value>false</param-value> 

</init-param> 

 

readonly參數默認是true,即不允許deleteput操作,所以默認的通過XMLHttpRequest對象的put或者delete方法訪問就會報告 http 403 forbidden 錯誤。

 

第二步:

 

從客戶端通過 Ajax XMLHTTPRequest 發起 DELETE/PUT 請求,利用AJAX的方式調用DELETE,

Jsp頁面添加:

<meta name="_csrf" content="${_csrf.token}"/>

<meta name="_csrf_header" content="${_csrf.headerName}"/>

<script type="text/javascript">

      var token = $("meta[name='_csrf']").attr("content");

     var header = $("meta[name='_csrf_header']").attr("content");

        function getXMLHTTPRequest(){

            if (XMLHttpRequest)    {

                return new XMLHttpRequest();

            } else {

                try{

                    return new ActiveXObject('Msxml2.XMLHTTP');

                }catch(e){

                    return new ActiveXObject('Microsoft.XMLHTTP');

                }

            }

        }

        var req = getXMLHTTPRequest();//DELETE

               

        req.open('DELETE','http://localhost:8080/images/play/1.png',false);

              req.setRequestHeader(header, token);

        req.send(null);

        //req.send({ form: 'data' });

        document.write(req.responseText);

 

     </script>

document.write(req.responseText);這一句既是調用了Ajax,也是將刪除的1.png返回回來,刪除成功 (已看到效果)。Tomcat文件中1.png已經被刪除


 

3.問題解決

 

tomcat下的應用程序中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>

修改應用中的web.xml就只針對本應用起作用,修改tomcat中的web.xml就可以對啓動在該tomcat下所有的應用起作用。
應用後的效果,請求 Access to the requested resource has been denied,會被拒絕

 

 4.安全拓展

Spring Security 4.0之後,引入了CSRF,默認是開啓。CSRF默認支持的方法: GET|HEAD|TRACE|OPTIONS,不支持POST

客戶端訪問服務端會首先發起get請求,這個get請求在到達服務端的時候,服務端的Spring security會有一個過濾 CsrfFilter去檢查這個請求,如果這個request請求的http header裏面的X-CSRF-COOKIEtoken值爲空的時候,服務端就好自動生成一個 token值放進這個X-CSRF-COOKIE值裏面,客戶端在get請求的header裏面獲取到這個值,如果客戶端有表單提交的post請求,則要求客戶端要 攜帶這個token值給服務端,在post請求的header裏面設置_csrf屬性的token值,提交的方式可以是ajax也可以是放在form裏面設置hidden 屬性的標籤裏面提交給服務端,服務端就會根據post請求裏面攜帶的token值進行校驗,如果跟服務端發送給合法客戶端的token值是一樣的,那麼 這個post請求就可以受理和處理,如果不一樣或者爲空,就會被攔截。由於惡意第三方可以劫持session id,而很難獲取token值,所以起到了 安全的防護作用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章