共用方式為


元數據的安全性考慮

在 Windows Communication Foundation 中使用元數據功能時,請考慮發佈、擷取和使用服務元數據的安全性影響。

發行元數據的時機

WCF 服務預設不會發佈元數據。 若要發佈 WCF 服務的元數據,您必須藉由將元數據端點新增至服務來明確啟用元數據發佈(請參閱 發佈元數據)。 停用元數據發佈會降低服務的攻擊面,並降低意外資訊洩漏的風險。 並非所有服務都必須發佈元數據。 如果您不需要發佈元數據,請考慮將其關閉。 請注意,您仍然可以使用 ServiceModel元數據公用程式工具 (Svcutil.exe) 直接從服務元件產生元數據和用戶端程序代碼。 如需使用 Svcutil.exe 匯出元數據的詳細資訊,請參閱 如何:使用 Svcutil.exe 從編譯的服務程式代碼匯出元數據

使用安全系結發佈元數據

WCF 提供的預設元數據系結並不安全,而且允許匿名存取元數據。 WCF 服務發佈的服務元數據包含服務的詳細描述,而且可能會刻意或無意地包含敏感性資訊。 例如,服務元數據可能包含不打算公開廣播之基礎結構作業的相關信息。 若要保護服務元數據不受未經授權的存取,您可以使用安全系結作為元數據端點。 元數據端點會回應 HTTP/GET 要求,這些要求可以使用安全套接字層 (SSL) 來保護元數據。 如需詳細資訊,請參閱操作說明:保護中繼資料端點的安全

保護您的元數據端點也提供一種方式,讓要求者安全地擷取服務元數據,而不會有竄改或詐騙的風險。

僅使用受信任的元數據

你可以利用服務元資料自動建構執行時元件來呼叫該服務。 你也可以在設計時使用元資料來開發客戶端應用程式,或在執行時動態更新客戶端用來呼叫服務的綁定。

以不安全的方式擷取服務元數據時,可能會遭到竄改或詐騙。 竄改的元數據可將用戶端重新導向至惡意服務、包含遭入侵的安全性設定,或包含惡意 XML 結構。 元數據檔可能很大,而且經常儲存至文件系統。 若要防止竄改和詐騙,請使用安全系結,在有服務元數據可用時要求服務元數據。

使用安全技術處理元數據

服務元數據經常透過網路從服務擷取,例如 WS-MetadataExchange (MEX) 等標準化通訊協定。 許多元數據格式包括指向其他元數據的參考機制。 類型 MetadataExchangeClient 會在 Web 服務描述語言 (WSDL) 檔、XML 架構和 MEX 檔中自動為您處理參考。 從擷取的元數據建立的物件大小,會與所使用的 MetadataSet 實例的 MaximumResolvedReferences 值以及該 MetadataExchangeClient 實例所使用的繫結的 MaxReceivedMessageSize 值成正比。 請將這些配額設定為您的案例所指定的適當值。

在 WCF 中,服務元數據會以 XML 處理。 處理 XML 檔時,應用程式應該保護自己免受惡意 XML 結構的影響。 在處理 XML 時,請使用適當的配額搭配XmlDictionaryReader,並將DtdProcessing屬性設定為Prohibit

WCF 中的元數據系統是可延伸的,而且元數據延伸可以在您的應用程式組態檔中註冊(請參閱 延伸元數據系統)。 元數據延伸模組可以執行任意程序代碼,因此您應該使用適當的訪問控制清單來保護應用程式組態檔,並只註冊受信任的元數據延伸模組實作。

驗證產生的客戶端

從不受信任來源擷取的元數據產生用戶端程式代碼時,驗證產生的用戶端程式代碼,以確保產生的用戶端符合用戶端應用程式安全策略。 您可以使用驗證行為來檢查客戶端系結上的設定,或以可視化方式檢查工具所產生的程式代碼。 如需如何實作驗證行為的用戶端範例,請參閱 客戶端驗證

保護應用程式組態檔

服務的應用程式組態檔可以控制元數據發佈的方式和狀況。 最好使用適當的訪問控制清單 (ACL) 保護應用程式組態檔,以確保攻擊者無法修改這類設定。

另請參閱