程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用mod_security保障Web Services的安全二

用mod_security保障Web Services的安全二

編輯:關於JAVA

將Web服務與mod_security結合起來

  

  Blue銀行的web服務使用www.bluebank.example.com/axis/getBalance.jws的URL。為這個資源創建一套規則通常一個不錯的主意。為達此目的,Blue銀行將此資源通過以下方式加入到httpd.conf:

  

  

  SecFilterEngine On

  SecFilterDefaultAction "deny,log,status:500"

  # Other rules

  # ------- Rules for web services --------------------------

  

  SecFilterInheritance Off

  SecFilterDefaultAction "deny,log,status:500"

  SecFilterScanPOST On

  SecFilterCheckURLEncoding On

  SecFilterCheckUnicodeEncoding On

  

  #---------------------------------------------------------------

  

  下面的指令塊為/axis/getBalance.jws應用了過濾標准。為了保護web服務它添加了必要的規則。這些規則在塊中,如下:

  

  # ------- Rules for web services --------------------------

  

  SecFilterInheritance Off

  SecFilterDefaultAction "deny,log,status:500"

  SecFilterScanPOST On

  SecFilterCheckURLEncoding On

  SecFilterCheckUnicodeEncoding On

  #---------------------------------------------------------------

  

  在這裡有兩個重要的指令:

  

  SecFilterInheritance Off

  

  這個指令關閉其他所有規則,為新的location建立一套規則創建一個干淨的空間。(譯者注:初始化,建立新空間)

  

  SecFilterScanPOST On

  

  由於web服務的方法調用是通過POST,所以這個指令是打開POST過濾器。

  

  有了上面的配置,Blue Bank已經在mod_security中部署了一個“護盾”(譯者注:防火牆)。該“護盾”也知道它的防護目標——客戶端通過SOAP封套發送的id的內容。

  

  防范攻擊

  

  作為防護所有惡意請求的第一步,Blue銀行需要限制從客戶端發送的id的值,防止傳來無效值。SOAP請求用XML標簽將id信息發送到web服務的代碼中,像如下這樣:

  

  

  12123

  

  為了過濾該請求,mod_security必須有一些途徑去讀取與標簽相關的值(在這裡標簽是id);這個例子中的值是12123,mod_security提供一些途徑限制通過POST請求發送的值。其中的一個方法就是使用自定義過濾器:

  

  

  SecFilterInheritance Off

  SecFilterDefaultAction "deny,log,status:500"

  SecFilterScanPOST On

  SecFilterCheckURLEncoding On

  SecFilterCheckUnicodeEncoding On

  SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>" chain

  

  上面標示出來的行對請求中的id進行限制。POST_PAYLOAD截取POST數據塊並與正則表達式(<\s*id[^>]*>)進行匹配。該正則表達式確保id標簽存在,當存在的情況下才進行其余的檢查。換句話說,如果id標簽存在,mod_security繼續下一個檢查。

  

  如果發送的POST請求中存在一個id,服務器能夠執行信息。然而,一個惡意的客戶端能夠修改這個值加入惡意內容。有四種最流行的攻擊方式。

  

  攻擊方式1:變量長度緩沖區注入(譯者注:緩沖區溢出)

  

  當把一個大的緩沖數據傳給一個變量時可能會引起應用程序運行不正常或者在執行的時候“宕”掉的安全隱患。下面的規則將保護id變量免受此類攻擊:

  

  

  SecFilterInheritance Off

  SecFilterDefaultAction "deny,log,status:500"

  SecFilterScanPOST On

  SecFilterCheckURLEncoding On

  SecFilterCheckUnicodeEncoding On

  SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>" chain

  SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.{6,}""deny,status:500"

  

  在上面的指令中,正則表達式<\s*id[^>]*>.{6,}限制緩沖變量的長度為5個字符。為了檢查上面的代碼塊是否起作用,Blue銀行可以發送兩個請求,一個請求符合約束,另一個越界。

  

  POST /axis/getBalance.jws HTTP/1.0Content-Type: text/XML; charset=utf-8SOAPAction: ""Content-Length: 576Expect: 100-continueHost: www.bluebank.example.com

  

  12123

  

  ...HTTP/1.1 200 OKDate: Mon, 03 Jan 2005 19:24:10 GMTServer: apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4Set-CookIE: JSESSIONID=69C6540CC427A8B064C0795ADDFC20EA; Path=/axisContent-Type: text/XML;charset=utf-8Connection: close

  

  

  $2500

  

  

  

  在上面的例子中,將一個包含5個字符的緩沖數據傳給web服務,服務收到後發回一個響應值為$2500。下面的例子將更改12123這個數據為121234,新的數據有6個字符,將得到一個新的響應信息,如下:

  

  POST /axis/getBlalance.jws HTTP/1.0Content-Type: text/XML; charset=utf-8SOAPAction: ""Content-Length: 577Expect: 100-continueHost: www.bluebank.example.com    

  121234

  

  ...HTTP/1.1 500 Internal Server ErrorDate: Mon, 03 Jan 2005 22:00:33 GMTServer: apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4Content-Length: 657Connection: closeContent-Type: text/Html; charset=iso-8859-1    

Internal Server Error

 

The server encountered an internal error or misconfiguration and was unable to complete your request.

 

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

  

More information about this error may be available in the servererror log.

 

  

Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7dmod_jk2/2.0.4 Server at 192.168.7.50 Port 80

  

  mod_security模塊拒絕了該請求。返回500狀態。這說明請求根本沒有到達web服務層。Blue 銀行成功地防范了最常見和常常被忽略的緩沖區溢出攻擊。(譯者注:HTTP定義的500狀態是服務器執行錯誤)

  

  第二種攻擊:元字符注入

  

  另外一個主要的針對輸入變量的威脅來自於使用像%,單引號(’),雙引號(”)。這些字符會導致SQL注入攻擊,並且可能會導致不必要的信息洩漏。采用下面的策略將保護web服務防范此類攻擊。

  

  

  SecFilterInherita

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved