構建安全的Xml Web Service系列之如何察看SoapMessage
上一篇文章地址:構建安全的Xml Web Service系列一之初探使用Soap頭 (5-22 12:53)
要分析Xml Web Service的安全性,首先要解決的問題是我們能了解和清楚Soap消息的格式和內容,如果獲得不了SoapMessage,分析如何能構建安全Xml web service也就無從下手,即使分析出來,自己也可 能模模糊糊,不能定論。下面就分析下如何獲得SoapMessage。
首先介紹一個類-SoapExtension,msdn對這個類的備注為:ASP.NET 允許通過擴展性機制生成與 SOAP 相關的基礎結構。ASP.NET SOAP 擴展結構以一種擴展為中心,該擴展可以在客戶端或服務器上處理消息時在特定階段中檢查或修改消息。ASP.NET SOAP 擴展從 SoapExtension 類派生。GetInitializer 和 Initialize 方法提供其他可用機制,用于初始化 SOAP 擴展以增強性能。ProcessMessage 是大多數 SOAP 擴展的核心,原因是該方法在 SoapMessageStage 中定義的每一個階段都被調用,從而使 SOAP 擴展得以執行所需的該特定 SOAP 擴展的行為。對于需要修改 SOAP 請求或 SOAP 響應的 SOAP 擴展,ChainStream 提供一個機會以接收要通過網絡發送的建議數據。 仔細閱讀這段文字,如果您以前開發過windows程序,那第一個應該想到的是:原來web service的處理機制和windows窗口程序的消息機制竟然有著一曲同工之妙。下面談談如何利用這個類,來截獲Xml web Service請求和相應的Soap消息,從而看看xml web service的廬山真面目。
首先大家先看看這個類,這個類完成的功能是將Xml Web Service通過擴展的方式,將每次的請求和響應的Soap消息通過日志的方式保存到文本文件中。日志記錄的方式也有兩種:
1。針對每個WebMethod產生一個日志文件。
2。針對每個WebService產生一個日志文件
因為一個WebService可能包含一個或者多個WebMethod,所以如果指定兩種方法都支持的話,那第二個日志兩面應該包括第一個日志里面的內容,而有些情況下,是不需要對每個WebMethod都進行日志記錄的,這時候采用第一種記錄方式,增強了系統的靈活性。
下面是擴展了的SoapExtension
<webServices>
<soapExtensionTypes>
<add type="Jillzhang.TraceExtension,Jillzhang" priority="1" group="High" />
</soapExtensionTypes>
</webServices>
可以記錄SoapMessage的SoapExtension
結下來,介紹一個如何使用該類:
如果要使讓TraceExtension支持第一種記錄方式,需要作的額外工作為:
只需要在要記錄SoapMessage的WebMethod添加如下的Attribute
[TraceExtension(Filename="d:\\data.xml",Priority=0)]
當然路徑,您可以自己設定
前一節的WebMethod就變成了
添加了針對WebMethod日志記錄的WebMethod
調用下該WebService,便在d盤產生一個data.xml文件,里面的內容為:
日志記錄
如何采用第二種方法,讓WebService的每個WebMethod都能記錄日志
需要在Web.config中作如下的設定
首先添加如下節點
<webServices>
<soapExtensionTypes>
<add type="Jillzhang.TraceExtension,Jillzhang" priority="1" group="High" />
</soapExtensionTypes>
</webServices>
然后通過配置設定日志文件保留的路徑:
<appSettings>
<add key="logRoot" value="d:"/>
</appSettings>
找到日志文件,里面也赫然有著SoapMessage的真面目。通過以上方法,大家可以清晰地分析到SoapMessage的具體格式和內容,知道了這個以后,對付Web Service,您就可以隨心應手,隨心所欲,如果你愿意,你甚至也可以“強奸"一次webservice,哈哈!
上一篇文章地址:構建安全的Xml Web Service系列一之初探使用Soap頭 (5-22 12:53)
附:終于買上房了,雖然買的過程很累,但現在還是很Happy!
要分析Xml Web Service的安全性,首先要解決的問題是我們能了解和清楚Soap消息的格式和內容,如果獲得不了SoapMessage,分析如何能構建安全Xml web service也就無從下手,即使分析出來,自己也可 能模模糊糊,不能定論。下面就分析下如何獲得SoapMessage。
首先介紹一個類-SoapExtension,msdn對這個類的備注為:ASP.NET 允許通過擴展性機制生成與 SOAP 相關的基礎結構。ASP.NET SOAP 擴展結構以一種擴展為中心,該擴展可以在客戶端或服務器上處理消息時在特定階段中檢查或修改消息。ASP.NET SOAP 擴展從 SoapExtension 類派生。GetInitializer 和 Initialize 方法提供其他可用機制,用于初始化 SOAP 擴展以增強性能。ProcessMessage 是大多數 SOAP 擴展的核心,原因是該方法在 SoapMessageStage 中定義的每一個階段都被調用,從而使 SOAP 擴展得以執行所需的該特定 SOAP 擴展的行為。對于需要修改 SOAP 請求或 SOAP 響應的 SOAP 擴展,ChainStream 提供一個機會以接收要通過網絡發送的建議數據。 仔細閱讀這段文字,如果您以前開發過windows程序,那第一個應該想到的是:原來web service的處理機制和windows窗口程序的消息機制竟然有著一曲同工之妙。下面談談如何利用這個類,來截獲Xml web Service請求和相應的Soap消息,從而看看xml web service的廬山真面目。
首先大家先看看這個類,這個類完成的功能是將Xml Web Service通過擴展的方式,將每次的請求和響應的Soap消息通過日志的方式保存到文本文件中。日志記錄的方式也有兩種:
1。針對每個WebMethod產生一個日志文件。
2。針對每個WebService產生一個日志文件
因為一個WebService可能包含一個或者多個WebMethod,所以如果指定兩種方法都支持的話,那第二個日志兩面應該包括第一個日志里面的內容,而有些情況下,是不需要對每個WebMethod都進行日志記錄的,這時候采用第一種記錄方式,增強了系統的靈活性。
下面是擴展了的SoapExtension
<webServices>
<soapExtensionTypes>
<add type="Jillzhang.TraceExtension,Jillzhang" priority="1" group="High" />
</soapExtensionTypes>
</webServices>如果要使讓TraceExtension支持第一種記錄方式,需要作的額外工作為:
只需要在要記錄SoapMessage的WebMethod添加如下的Attribute
[TraceExtension(Filename="d:\\data.xml",Priority=0)]
當然路徑,您可以自己設定
前一節的WebMethod就變成了
需要在Web.config中作如下的設定
首先添加如下節點
<webServices>
<soapExtensionTypes>
<add type="Jillzhang.TraceExtension,Jillzhang" priority="1" group="High" />
</soapExtensionTypes>
</webServices>
<appSettings>
<add key="logRoot" value="d:"/>
</appSettings>上一篇文章地址:構建安全的Xml Web Service系列一之初探使用Soap頭 (5-22 12:53)
附:終于買上房了,雖然買的過程很累,但現在還是很Happy!
作者:jillzhang
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

浙公網安備 33010602011771號