關於具有程式代碼之表單範本的安全性模型
InfoPath Managed 程式碼表單範本可支援與在 Unmanaged 表單範本中執行指令碼的相同安全性層級,而且它們也支援其他的程式碼存取安全性功能,這些功能會套用至在 .NET Framework 之 Common Language Runtime (CLR) 底下執行的 Managed 程式碼。
InfoPath Managed 物件模型安全性層級
下表將說明當物件模型成員用於 Managed 程式碼表單範本時,指令碼物件模型成員的安全性層級與每個層級所要求的對應權限集合之間的關聯。
物件模型安全性層級 | 描述 | 要求的權限集合 |
---|---|---|
0 |
可以存取而沒有限制。 | 無 |
2 |
只能由與目前開啟的表單在相同網域執行的表單存取,或是只能由已授予跨網域權限的表單存取。 | 無 |
3 |
只能由完全信任的表單存取。 | FullTrust |
注意事項
[!注意事項] 目前的 InfoPath COM 伺服器並未使用安全性層級 "1",它是保留給未來之用。
重要事項
[!重要] 即使物件模型層級 0 和 2 並未要求任何權限集合,但是因為它們包含 Managed 程式碼,所以它們的行為會依據下一節所述之 [網域] 網域存取安全性層級的定義。
由 Microsoft.Office.InfoPath and Microsoft.Office.Interop.InfoPath.SemiTrust 組件公開之每個物件模型成員的安全性層級是在說明 Microsoft.Office.InfoPath 和 Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間中該成員之主題的「備註」一節中指定。
InfoPath 網域存取安全性層級
與由 InfoPath 應用程式公開的 COM 伺服器所強制的物件模型安全性層級一起使用時,InfoPath 會定義三個安全性層級,這些層級將視表單範本所在的位置、表單部署的方式以及在設計模式中設定的設定,來套用。 這三個安全性層級會在下表中定義。
網域存取安全性層級 | 描述 |
---|---|
限制 |
不允許在表單範本外面的任何通訊。 此安全性層級是用來避免有害表單從您的電腦傳輸任何資料給惡意攻擊者。 在此安全性模式中執行時,下列功能將無法運作:自定義工作窗格、數據 Connections (,但電子郵件送出) 、ActiveX 控制件、Managed 程式代碼表單程式代碼、角色和工作流程除外。 Managed 程式碼表單範本無法在 [限制] 網域中執行。 在 [表單選項] 對話方塊的 [安全性與信任] 類別中,當 Managed 程式碼表單範本設定為 [自動判斷安全性層級] 設定時,表單範本一定至少會需要 [網域] 安全性存取層級來執行程式碼。 重要事項:針對 Managed 程式代碼窗體範本建立的 Managed 程式代碼元件,不會在從受限制的網域開啟表單時載入和執行,例如,從以電子郵件附件形式傳送的 InfoPath 窗體。 您想要部署為電子郵件附件的任何窗體範本都必須省略上述功能,而且如果窗體範本包含窗體程式代碼,則表單程式代碼必須以 JScript 或 VBScript 實作,而且必須只利用安全性層級為 0 (零) 的物件模型成員。 |
網域 |
依據表單在 Microsoft Internet Explorer 定義的其中一個安全性區域所在的位置來限制表單。 例如,如果表單位於近端內部網路區域,就會允許它在自己的網域中與其他資料通訊,但是不允許從其他網域擷取資料。 在 Microsoft Internet Explorer 安全性區域中的位置也會判斷標示為不安全指令碼的 ActiveX 控制項是否允許執行。 |
完全信任 |
允許您在使用表單的電腦上執行具有完全信任的表單。 當使用與您電腦上受信任根發行者相符的數位簽章所簽署的表單時,才能使用此安全性層級,或建立一個安裝表單的安裝程式,並在表單定義檔 (.xsf) 中將 xDocumentClass 元素的 requireFullTrust 屬性設為 "yes"。 透過使用此設定,您的表單可以存取需要物件模型安全性層級 3 的物件模型呼叫,例如存取檔案系統的屬性與方法,而且您可以停用在更多限制的安全性層級執行時所出現的某些安全性提示。 |
InfoPath 表單預設是設定為,根據表單範本中使用的功能以及表單範本的部署位置和方式,自動選取 [限制] 或 [網域] 安全性層級。 例如,部署為電子郵件附件的窗體範本會自動設定為受限制的安全性層級。 安全性設定會從 [限制] 開始儘可能設成有限制性,以確保讓您和資料獲得最大層級的保護。 當包含 Managed 程式碼的表單範本設定為自動選取安全性層級時,表單範本一定至少會需要 [網域] 安全性存取層級,然後程式碼才能執行。 您可以使用下列程序,在設計階段手動覆寫此設定,以選取對表單更適合的安全性層級。
指定表單的安全性層級
開啟 InfoPath 表單設計工具中的表單,依序按一下 [檔案] 索引標籤、[資訊] 和 [表單選項]。
在 [表單選項] 對話方塊中,按一下 [安全性與信任] 類別。
清除 [自動判斷安全性層級 (建議)] 核取方塊。
選取所需的安全性層級。
注意事項
- 如果您為 Managed 程式碼表單範本選取 [限制] 安全性層級,則無論表單程式碼中使用哪些物件模型成員,都不會載入和執行表單所含的程式碼。 此安全性層級主要是針對使用電子郵件部署的 InfoPath 窗體所設計。
- 如果您選取 [完全信任] 安全性層級,就必須數位簽署或安裝和註冊表單。 如需詳細資訊,請 參閱使用程式碼部署 InfoPath 窗體範本。
下列表格摘要 InfoPath 安全性模型。 第一欄列出為表單指定或表單所需的層級。 第二欄和第三欄則是指定表單在其位置中是否具有 URN 或 URL 識別項。 其餘的欄會則指定允許執行的欄。 如需 Managed 程式碼表單範本的部署案例和權限集合之詳細資訊,請參閱本主題稍後的<Common Language Runtime 程式碼存取安全性功能>。
表單所需的層級 | 含有 URN 識別項 | 含有 URL 識別項 | 標示為不安全的 ActiveX 以進行腳本處理 | 跨網域存取 | Managed 程式碼 | 物件模型安全性 |
---|---|---|---|---|---|---|
Restricted |
X |
完全沒有 ActiveX |
失敗 |
載入表單,但不會執行 Managede 程式碼 |
0 |
|
網域 (Internet Explorer [限制的網站] 區域) |
完全不會執行 |
完全不會執行 |
完全不會執行 |
完全不會執行 |
完全不會執行 |
完全不會執行 |
網域 (Internet Explorer [網際網路] 區域) |
X |
失敗 |
失敗 |
完全不會執行 |
0 |
|
網域 (Internet Explorer [近端內部網路] 區域) |
X |
失敗 |
提示 |
使用 [近端內部網路] 權限執行的 Managed 程式碼。 | 2 |
|
網域 (Internet Explorer [信任的網站] 區域) |
X |
提示 |
確定 |
使用 [網際網路] 權限執行的 Managed 程式碼。 允許跨網域存取。 請注意,即使表單位於 [信任的網站] 區域,也適用 [網際網路] 區域權限。 | 2 |
|
網域 (Internet Explorer [本機電腦] 區域) |
X |
X |
提示 |
失敗 |
使用 [近端內部網路] 權限執行的 Managed 程式碼。 | 2 |
完全信任 |
X |
X |
確定 |
確定 |
完全信任 |
3 |
重要事項
[!重要] 「標示為不安全指令碼的 ActiveX」和「跨網域存取」欄位中的上述說明會採用 Microsoft Internet Explorer 的預設安全性設定。 如果使用者變更其安全性設定,InfoPath 的行為將會據以變更。 例如,如果在 [近端內部網路] 區域中,[存取跨網域的資料來源] 設定為 [啟用],則系統就不會提示使用者是否與允許跨網域存取,如上表所述。
Common Language Runtime 程式碼存取安全性功能
當編譯 InfoPath Managed 程式碼的表單範本時,會建立包含表單程式碼邏輯實作的私用 Managed 程式碼組件。
根據預設,在 .NET Framework 中,如果 Managed 程式碼組件在本機電腦上執行,就會具有「完全信任」權限,但在內部網路執行時,將不會被授與「完全信任」權限。 為了提供更多安全性原則的進階控制,並提供從內部網路當做完全信任表單執行 InfoPath Managed 程式碼表單範本的選項,InfoPath 會實作下列安全性架構。
InfoPath 應用程式主控 .NET Framework Common Language Runtime (CLR)。
在 InfoPath 主控的 CLR 內,每個 Managed 程式碼表單範本都會在個別的應用程式定義域中執行,它是一個為執行中 Managed 程式碼提供獨立、卸載和安全性界限的環境。
視表單範本與其位置的 URL 所關聯的信任層級而定,InfoPath 會在應用程式網域上設定預設的安全性原則。
根據預設,Managed 程式碼表單範本在本機電腦 (「我的電腦區域」程式碼群組) 上執行時,將取得比「完全信任」較低層級的權限 (「近端內部網路區域」權限)。 若要擁有「完全信任」權限,表單必須以信任的憑證註冊或數位簽署。
Managed 程式碼表單範本之應用程式定義域的預設安全性原則集合可確保已強制執行 InfoPath 網域存取安全性層級以及任何其他的 .NET 安全性限制。 若要提供其他的彈性,InfoPath 安全性系統將識別名為 "InfoPath Form Templates" 的 .NET 程式碼存取安全性程式碼群組。 如果此程式碼群組是在使用者的電腦上,其安全性設定和任何在其中的子程式碼群組,都將套用至該應用程式網域。
重要事項
- InfoPath Form Templates 程式碼群組只會套用至 Managed 程式碼表單程式碼組件本身。 因此,如果您將「完全信任」權限集合授與 InfoPath Managed 程式碼表單程式碼,但尚未安裝及註冊 (或數位簽署) 表單範本本身 (如此可讓整個表單範本受到完全信任),表單程式碼中對於安全性層級 3 物件模型成員的呼叫仍然會失敗。
- 如果您參照或明確載入 (Assembly.Load) 的組件,是由使用「雜湊」(Hash)、「強式名稱」(Strong Name) 或 Publisher 舉證來判定其在表單範本專案中的成員條件之限制權限集合來加以設定,組件將不會被表單載入及執行。
如需如何建立和設定 InfoPath 窗體範本程式代碼群組的資訊,請參閱使用程式 碼設定表單範本的安全性設定。
下表將摘要列出套用至 Managed 程式碼表單範本的部署案例與權限集合。
部署案例 | 權限集合 | 附註 |
---|---|---|
表單範本是在本機電腦上發佈,而且開發人員使用 Visual Studio 撰寫和偵錯表單程式碼。 | 近端內部網路權限集合。 安裝在全域組件快取 (GAC) 中且使用 AllowPartiallyTrustedCallersAttribute 屬性標示的組件將會被授與「完全信任」權限集合。 | 根據預設,從本機電腦執行的表單範本不會被授與「完全信任」權限集合。 開發使用需要完全信任許可權之物件模型成員之功能和呼叫的表單範本時,您可以使用需要 完全信任的預覽和偵錯表單範本中所述的程式。 |
表單範本是在本機電腦上發佈,並參照在本機電腦上要求「完全信任」權限集合的自訂組件。 | 近端內部網路權限集合。 安裝在全域組件快取 (GAC) 中且使用 AllowPartiallyTrustedCallersAttribute 屬性標示的組件將會被授與「完全信任」權限集合。 自訂組件會被授與「近端內部網路」權限集合。 | 若要在表單範本程式碼中參照要使用的外部組件,開發人員必須使用 InfoPath Form Templates 程式碼群組,對表單範本程式碼中參照的外部組件授與「完全信任」(或適當的權限集合)。 除了安裝在全域組件快取 (GAC) 中的外部組件以外,InfoPath 對於外部組件並未做任何的假設。 開發人員必須使用 InfoPath Form Templates 程式碼群組,明確地授與組件必要的權限,即使組件已透過 My_Computer_Zone 程式碼群組所授與的權限而獲得信任亦然。 |
表單範本是發佈在近端內部網路的共用位置上,例如檔案共用、SharePoint 表單庫或 Web 伺服器。 | 近端內部網路權限集合。 安裝在全域組件快取 (GAC) 中且使用 AllowPartiallyTrustedCallersAttribute 屬性標示的組件將會被授與「完全信任」權限集合。 | |
表單範本是發佈在近端內部網路的共用位置上,例如檔案共用、SharePoint 表單庫,或在 Internet Explorer 中指定為「信任的網站」的 Web 伺服器。 | 網際網路權限集合。 由 Microsoft 和 ECMA 簽署的組件會被授與「完全信任」權限集合。 | CLR 程式碼存取安全性只會將網際網路權限集合授予給在 Internet Explorer 中指定為 [信任的網站 ] 的網站。 InfoPath 將遵照此原則。 請注意這與表單程式碼中使用指令碼的 InfoPath 表單範本不同,在 [信任的網站] 區域中發佈時,將獲得更高層次的權限。 |
表單範本是從網際網路的位置下載或複製。 | 根據預設,否。 不會載入和執行表單範本的 Managed 程式碼組件。 |