ASP.NET 部分信任無法保證應用程式隔離

簡介

ASP.NET 可讓系統管理員以部分信任模式(例如中等信任)託管應用程式。 它也可讓您透過自訂原則檔案來設定自訂部分信任層級。 如需有關如何在 ASP.NET 2.0 中使用中等信任的詳細資訊,請移至下列 Microsoft Developer Network (MSDN) 網頁:

作法:在 ASP.NET 2.0 中使用中等信任 我們先前將部分信任描述為在共用裝載環境中強制執行應用程式隔離的機制 ASP.NET 在該環境中,多個具有不同信任層級的應用程式裝載在同一個網頁伺服器上。 我們正在更新這方面的指引,以反映以部分信任方式執行 ASP.NET 頁面架構應用程式,並無法保證與相同處理序或相同電腦上執行的其他應用程式完全隔離。 

將 ASP.NET 頁架構應用程式設定為在個別的低權限進程中執行, (使用個別應用程式集區執行) 這是確保與相同網頁伺服器上其他 ASP.NET 頁面架構應用程式隔離的建議程序。 以下章節提供有關如何設定隔離應用程式的詳細資訊。 我們正在更新其他文件,以反映本文中概述的原則變更。 

更多資訊

伺服器系統管理員應套用本文中的指導方針,以確保在共用主控環境中隔離應用程式。 這些準則適用於在 Windows Server 2003 SP2 和更新版本上託管 ASP.NET。 這些指導方針涵蓋 Internet Information Services (IIS) 6.0 到 7.5。

透過使用 IIS 7 和 7.5 中的 AppCmd.exe IIS 命令列工具,以及使用 IIS 6.0 中的 IIS 管理指令碼 ,將此處概述的許多工作自動化。

如何將應用程式放在不同的 IIS 網站

在共用裝載環境中,應用程式應放置在不同的 IIS 網站。 當應用程式裝載在不同的站台時,設定可以更好地在應用程式之間隔離。 此外,.NET Framework CLR 主機將會分開。 這可在該層級提供額外的隔離。

若要將每個應用程式放在不同的網站中,請遵循下列步驟:

Internet Information Services 6.0 (Windows Server 2003 SP2)

  1. 在 IIS) Manager (開啟 Internet Information Services。
  2. 在左側窗格中,展開目前伺服器的節點。
  3. 以滑鼠右鍵按一下 [網站 ] 節點,按一下 [新增],然後按一下 [網站]。
  4. 按一下 [下一步]。
  5. 輸入新網站的唯一名稱,然後按 [下一步]。
  6. 設定主控環境的網站繫結。
  7. 輸入儲存應用程式檔案之資料夾的實體路徑。
  8. 按一下以選取 [ 執行指令碼 (例如 ASP) ] 核取方塊,然後按 [下一步]。
  9. 按一下 [完成]。 新網站隨即出現在 [ 網站] 節點底下。

Windows Vista SP2 和 Windows Server 2008 SP1 (Internet Information Services 7) 和 Internet Information Services 7.5 (Windows 7 和 Windows Server 2008 R2)

  1. 在 IIS) Manager (開啟 Internet Information Services。
  2. 在 [連線] 窗格中,展開目前伺服器的節點。
  3. 選取 [網站] 節點,然後按一下 [動作] 窗格中的 [新增網站] 連結。
  4. 在 [ 新增網站 ] 對話方塊中,輸入新網站的唯一名稱,然後輸入儲存應用程式檔案所在資料夾的實體路徑。 根據預設,會建立與網站名稱相同的新應用程式集區,並將網站設定為使用這個應用程式集區。 (這是建議的設定。)
  5. 設定主控環境的網站繫結。
  6. 按一下以清除 [ 立即啟動網站 ] 核取方塊,以確保在完成此處概述的隔離指導方針之前,網站無法使用。
  7. 按一下 [確定]。 設定的網站會出現在 [連線] 窗格的 [網站] 節點下。

如何將網站放在不同的應用程式集區中

在共用裝載環境中,應用程式應該放在不同的應用程式集區中。 這允許將應用程式隔離到具有唯一身分識別的單獨作業系統進程中。 這提供了從一個站台到另一個站台的隔離級別。 (以下章節描述如何設定隔離的應用程式集區身分識別。)

Internet Information Services 6.0 (Windows Server 2003 SP2)

  1. 在 IIS) Manager (開啟 Internet Information Services。
  2. 在左側窗格中,展開目前伺服器的節點。
  3. 以滑鼠右鍵按一下 [應用程式集區],按一下 [新增],然後按一下 [應用程式集區]。
  4. 輸入新應用程式集區的唯一名稱,然後按一下 [確定]。
  5. 展開 [網站] 節點。
  6. 以滑鼠右鍵按一下目標網站,然後按一下 [內容]。
  7. 按一下 [常用目錄 ] 索引標籤。
  8. 在對話方塊底部的 [ 應用程式集區 ] 欄位中,選取新的應用程式集區。
  9. 按一下 [確定]。

Windows Vista SP2 和 Windows Server 2008 SP1 (Internet Information Services 7) 和 Internet Information Services 7.5 (Windows 7 和 Windows Server 2008 R2)

遵循「如何將應用程式放在不同的 IIS 網站」一節中的步驟之後,新網站會自動放置在新的單獨應用程式集區中。 不過,如果您必須設定現有的網站,以使用新的個別應用程式集區,請遵循下列步驟:

  1. 在 IIS) Manager (開啟 Internet Information Services。
  2. 在 [連線] 窗格中,展開目前伺服器的節點。
  3. 選取 [應用程式集區] 節點。
  4. 在 [動作 ] 窗格中,按一下 [新增應用程式集區] 連結。
  5. 輸入新應用程式集區的唯一名稱,然後選取目標 .NET Framework 版本和管線模式。
  6. 按一下 [確定]。 新的應用程式集區隨即顯示在清單中。
  7. 在 [連線] 窗格中,展開 [ 網站 ] 節點。
  8. 選取您想要移動至您稍早在此程序中建立的應用程式集區的網站。
  9. 在 [動作 ] 窗格中,按一下 [ 基本設定 ] 連結。
  10. 在 [ 編輯網站 ] 對話方塊中,按一下 [選取]。
  11. 在 [ 應用程式集區 ] 清單中,選取您先前建立的應用程式集區。
  12. 按一下 [確定]。

在 [編輯網站 ] 對話方塊中,按一下 [確定]。

如何設定應用程式集區以隔離 (處理序身分識別)

應用程式集區會在 Windows 進程 (或進程) 中託管應用程式和站台。 執行處理程序的身分識別是可設定的。 在共用裝載環境中,每個應用程式應該有個別的身分識別。 這可確保每個應用程式都在唯一帳戶的內容中執行。 這允許使用檔案系統自行決定存取控制清單 (DACL) ,以及基礎作業系統的內建處理程序隔離功能,以正確隔離。 若要建立使用者帳戶,然後指派應用程式集區以使用該帳戶,請遵循下列步驟。

Internet Information Services 6.0 (Windows Server 2003 SP2)

建立本機使用者帳戶以做為應用程式集區身分識別

  1. 在 IIS) Manager (開啟 Internet Information Services。
  2. 在左側窗格中,展開 [本機使用者和群組]。
  3. 以滑鼠右鍵按一下 [使用者 ] 節點,然後按一下 [新增使用者]。
  4. 輸入新使用者帳戶的唯一名稱和強式密碼。
  5. 按一下以清除 [使用者下次登入時必須變更密碼 ] 核取方塊。
  6. 按一下以選取 [使用者無法變更密碼 ] 核取方塊。
  7. 按一下 [建立],然後按一下 [關閉]。
  8. 在左側窗格中,選取 [ 使用者 ] 節點。 新帳戶隨即出現在清單中。

將應用程式集區設定為使用新的本機使用者帳戶

  1. 在 IIS) Manager (開啟 Internet Information Services。
  2. 在左側窗格中,展開目前伺服器的節點。
  3. 展開 [應用程式集區] 節點。
  4. 以滑鼠右鍵按一下目標應用程式集區,然後按一下 [內容]。
  5. 按一下 [身分識別 ] 索引標籤。
  6. 選取 [ 可設定 選項] 按鈕。
  7. 輸入新帳戶的使用者名稱和密碼。
  8. 按一下 [確定]。
  9. 在 [確認密碼] 對話方塊中重新輸入密碼,然後按一下 [確定]。

Windows Vista SP2、Windows Server 2008 SP1、Windows 7 和 Windows Server 2008 R2 (Internet Information Services 7 和 7.5)

  1. 在 IIS) Manager (開啟 Internet Information Services。
  2. 在 [連線] 窗格中,展開目前伺服器的節點。
  3. 選取 [應用程式集區] 節點。
  4. 選取目標應用程式集區。
  5. 在 [動作 ] 窗格中,按一下 [ 進階設定 ] 連結。
  6. 在 [流程模型 ] 區段中,將 [身分識別 ] 屬性設定為 ApplicationPoolIdentity。 此設定會自動為此應用程式集區建立唯一身分識別。 在下列各節中,您可以使用這個唯一身分識別,在應用程式需要存取的檔案位置上設定任意存取控制清單 (DACL) 。
  7. 按一下 [確定]。

如何在應用程式內容位置上設定 DACL

DACL) (的任意存取控制清單是與物件相關聯且可用來控制物件存取權限的清單。 使用 DACL 來限制對應用程式內容的存取,有助於加強裝載在同一 Web 伺服器上的網站間的隔離。 如需 ACL 和 IIS 身分識別的詳細資訊,請參閱 透過檔案系統 ACL 保護 IIS 中的內容

IIS 的所有版本

  1. 在命令提示字元處或 Windows 檔案總管中,開啟網站內容的根資料夾。

  2. 使用下列其中一種方法移除此位置的任何非系統管理員存取項目。 (這包括 Users 群組。)

    • 在 Windows 檔案總管中,以滑鼠右鍵按一下資料夾,選取 [內容],然後按一下 [ 安全性 ] 索引標籤,然後變更存取控制清單。
    • 在命令提示字元中,使用舊版 Windows 作業系統) (或 cacls.exe icacls.exe 公用程式來變更存取控制清單。
  3. 為您網站選取的處理程序身分識別新增項目。

  4. 授與新身分識別資料夾的「讀取」和「執行」權限。

                
如果有特定的資料夾需要應用程式 (寫入權限,例如「上傳」資料夾) ,請遵循下列步驟:

Internet Information Services 6.0 (Windows Server 2003 SP2)

  1. 在 Windows 檔案總管中,以滑鼠右鍵按一下資料夾,選取 [內容],按一下 [ 安全性 ] 索引標籤,然後新增處理程序身分識別的 [修改 ] 存取權。

  2. 針對包含圖片、文字檔案等靜態內容 (資料夾) ,請依照下列步驟執行:

    1. 在 IIS) Manager (開啟 Internet Information Services。
    2. 在左側窗格中,以滑鼠右鍵按一下適當的資料夾名稱,然後按一下 [內容]。
    3. 按一下 目錄 索引標籤。
    4. 在 [執行權限 ] 清單中,選取 [無]。

Windows Vista SP2、Windows Server 2008 SP1、Windows 7 和 Windows Server 2008 R2 (Internet Information Services 7 和 7.5)

  1. 在 Windows 檔案總管中,以滑鼠右鍵按一下資料夾,選取 [內容],按一下 [ 安全性 ] 索引標籤,然後新增處理程序身分識別的 [修改 ] 存取權。

  2. 對於將包含靜態內容 (圖片、文字檔案等) 的資料夾,請在 accessPolicy 設定中,為不允許指令碼權限的位置新增一個「web.config」檔案項目:

    <system.webServer>
    <處理常式 accessPolicy=“讀取,寫入” />
    </system.webServer>

如何設定暫存 ASP.NET Files資料夾位置以及如何設定每個網站的 DACL

ASP.NET 需要伺服器上有一個位置來儲存暫存資料,例如編譯檔案。 這通常是 [暫存 ASP.NET Files] 資料夾。 根據預設,此資料夾位於安裝 .NET Framework 的資料夾底下。 為每個網站配置不同的暫存位置,並個別保護資料夾,有助於加強裝載在同一 Web 伺服器上的網站之間的隔離。 如需有關 Temporary ASP.NET Files 資料夾的詳細資訊,請參閱瞭解動態編譯 ASP.NET。

如何為每個網站設定不同的暫存 ASP.NET Files資料夾位置

  1. 為每個網站建立新資料夾,以儲存該網站的暫存 ASP.NET 檔案。 最好使用非系統磁碟機來儲存暫存檔案。
  2. 在伺服器的根 web.config 或 applicationHost.config 檔案中,使用 <location> 元素來指向該特定網站新資料夾位置的設定,如下所示:
    <設定>
    <location path=“path”>
    <System.Web>
    <編譯 tempDirectory=“temp-files-path” />
    </system.web>
    </location>
    <--依此類推 -->
    </configuration>

如何在 [暫存 ASP.NET Files] 資料夾位置上設定適當的 DACL

  1. 使用命令提示字元或 Windows 檔案總管移除此位置的任何非系統管理員存取權限。 (這包括 Users 群組。)
  2. 為先前為此站台選取的處理程序身分識別新增項目,然後授予此身分識別資料夾的 修改 存取權限。

如何從根設定檔移除敏感性設定資料

應用程式 web.config 檔案位於所服務應用程式的內容資料夾中。 即使 ASP.NET 不會提供應用程式 web.config 檔案,但可行時,最好將安全性敏感性資訊(例如機器金鑰設定和連接字串)放在應用程式位置外部的設定檔中。 這增加了對資訊洩露的防禦。

Internet Information Services 6.0 (Windows Server 2003 SP2)

將有安全顧慮的設定資訊儲存在根 web.config 檔案中不是隔離不同網站之間資料的良好選項,因為所有網站都有此檔案的讀取存取權。 因此,在 IIS 6 上,您應該將敏感性設定儲存在應用程式 web.config 檔中。 這可讓網站彼此隔離敏感性設定。 在這種情況下,您的應用程式將依賴 ASP.NET 防禦措施來防止提供應用程式 web.config 檔案,並確保敏感性資訊不會被洩漏。

Windows Vista SP2、Windows Server 2008 SP1、Windows 7 和 Windows Server 2008 R2 (Internet Information Services 7 和 7.5)

針對 IIS 7 和更新版本,請將 IIS applicationHost.config 檔案中的敏感性設定移至 <location> 元素,以便將設定的範圍設定為套用它的網站。 如需詳細資訊,請參閱 如何在 IIS 7.0 設定中使用鎖定。 Microsoft 感謝 下列人員與我們合作保護客戶: