ASP.NET 部分信任並不保證應用程式的隔離

簡介

ASP.NET 允許管理員以部分信任模式(如中度信任)來托管應用程式。 它也允許透過自訂政策檔案設定自訂部分信任等級。 欲了解更多如何在 ASP.NET 2.0 中使用 Medium Trust 的資訊,請造訪以下 Microsoft 開發者網絡 (MSDN) 網頁:

如何:在 ASP.NET 2.0 中使用 Medium Trust 我們先前描述 ASP.NET 部分信任是一種在共享主機環境中強制應用程式隔離的機制,該環境中多個擁有不同信任等級的應用程式託管在同一伺服器上。 我們正在更新相關指引,反映出以部分信任方式執行 ASP.NET 頁框架應用程式,並不保證能完全隔離於同一程序或同一電腦上執行的其他應用程式。 

建議將 ASP.NET 頁框架應用程式配置為在獨立的低權限程序中執行, (使用個別應用程式池) ,以確保在同一網頁伺服器上與其他 ASP.NET 頁框架應用程式隔離。 以下章節將詳細說明如何配置應用程式以實現隔離。 我們正在更新其他文件,以反映本文所述政策變更。 

更多資訊

伺服器管理員應依照本文指引,確保應用程式在共享主機環境中被隔離。 這些指引適用於 2003 Windows Server SP2 及以後版本的主機 ASP.NET。 指引涵蓋網際網路資訊服務 (IIS) 6.0至7.5。

此處列出的許多任務,可透過使用 IIS 7 與 7.5 中的 AppCmd.exe IIS 命令列工具,以及 IIS 6.0 中的 IIS 管理腳本 來自動化。

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

在共享主機環境中,應用程式應部署在不同的 IIS 站點。 當應用程式分別託管在不同站點時,設定會更為獨立。 此外,.NET Framework 的 CLR 主機將是獨立的。 這在該層級提供了額外的隔離。

要將每個申請放在獨立網站,請依照以下步驟進行:

網際網路資訊服務 6.0 (Windows Server 2003 SP2)

  1. 開啟 IIS) Manager (網際網路資訊服務。
  2. 在左側窗格中,展開目前伺服器的節點。
  3. 右鍵點擊 網站 節點,點 選新網站,然後點擊 網站
  4. 按一下 [下一步]
  5. 輸入新網站的唯一名稱,然後點擊 「下一步」。
  6. 設定主機環境的網站綁定。
  7. 輸入存放應用程式檔案的資料夾的物理路徑。
  8. 點擊選擇 執行腳本 (如 ASP) 勾選框,然後點擊 「下一步」。
  9. 按一下 [完成]。 新網站會出現在 網站 節點下。

網際網路資訊服務 7 (Windows Vista SP2 與 Windows Server 2008 SP1) ,以及網際網路資訊服務 7.5 (Windows 7 與 Windows Server 2008 R2)

  1. 開啟 IIS) Manager (網際網路資訊服務。
  2. Connections 面板中,展開目前伺服器的節點。
  3. 選擇網站節點,然後在動作窗格中點擊新增網站連結。
  4. 新增網站 對話框中,輸入新網站的唯一名稱,然後輸入存放應用程式檔案資料夾的實體路徑。 預設情況下,會建立一個與該網站名稱相同的新應用程式池,並設定該應用池使用該應用程式池。 (這是推薦的配置 )
  5. 設定主機環境的網站綁定。
  6. 點擊清除「 立即開始網站 」的勾選框,以確保該網站在完成此處所述隔離指引前無法使用。
  7. 按一下 [確定]。 已設定的網站會出現在連接面板的「網站」節點下。

如何將網站放入不同的應用程式池

在共享主機環境中,應用程式應該被放在獨立的應用程式池中。 這使得應用程式能夠被隔離成具有唯一身份的獨立作業系統程序。 這提供了從一個地點到另一個地點的隔離。 (以下章節說明如何設定應用程式池身份以進行隔離 )

網際網路資訊服務 6.0 (Windows Server 2003 SP2)

  1. 開啟 IIS) Manager (網際網路資訊服務。
  2. 在左側窗格中,展開目前伺服器的節點。
  3. 右鍵點擊 「應用程式池」,點 選「新」,然後點 選「應用程式池」。
  4. 輸入新申請池的唯一名稱,然後點擊 確定
  5. 展開 網站 節點。
  6. 右鍵點擊目標網站,然後點 選「屬性」。
  7. 點擊 「家庭目錄 」標籤。
  8. 在對話框底部的 應用程式池 欄位,選擇新的應用程式池。
  9. 按一下 [確定]

網際網路資訊服務 7 (Windows Vista SP2 與 Windows Server 2008 SP1) ,以及網際網路資訊服務 7.5 (Windows 7 與 Windows Server 2008 R2)

在「如何將應用程式放入不同的 IIS 站點」步驟後,新站點會自動被放入一個新的獨立申請池。 不過,如果你必須將現有站點配置為使用新的獨立應用程式池,請依照以下步驟操作:

  1. 開啟 IIS) Manager (網際網路資訊服務。
  2. Connections 面板中,展開目前伺服器的節點。
  3. 選擇應用程式池節點。
  4. 動作 面板中,點選 「新增應用程式池 」連結。
  5. 輸入新應用程式池的唯一名稱,然後選擇目標的 .NET Framework 版本與管線模式。
  6. 按一下 [確定]。 新的應用程式池會顯示在清單中。
  7. 連結 面板中,展開 網站 節點。
  8. 在此過程中選擇你想移至先前建立的應用程式池的網站。
  9. 動作 面板中,點擊 基本設定 連結。
  10. 編輯網站 對話框中,點擊 選擇
  11. 應用程式池 清單中,選擇你之前建立的應用程式池。
  12. 按一下 [確定]

編輯網站 對話框中,點擊 確定

如何配置應用程式池以隔離 (程序身份)

應用程式池在 Windows 程序中 (或) 的程序中托管應用程式與站點。 程序執行的身份是可設定的。 在共享主機環境中,每個應用程式應該有獨立的身份。 這確保每個應用程式都在一個獨特的帳號環境中執行。 這允許透過檔案系統的自由存取控制清單 (DACL) 以及底層作業系統內建的程序隔離功能,實現正確的隔離。 要建立使用者帳號並指派一個應用程式池來使用該帳號,請依照以下步驟操作。

網際網路資訊服務 6.0 (Windows Server 2003 SP2)

建立一個本地使用者帳號作為應用程式池的身份

  1. 開啟 IIS) Manager (網際網路資訊服務。
  2. 在左側窗格中,展開 「本地使用者與群組」。
  3. 右鍵點擊 使用者 節點,然後點 選新使用者
  4. 輸入一個獨特的名稱和強密碼,為新使用者帳號設定。
  5. 點擊以清除「 使用者必須在下次登入時更改密碼」 的勾選框。
  6. 點擊選擇 「使用者無法更改密碼 」的勾選框。
  7. 點選 「建立」,然後「 關閉」。
  8. 在左側窗格中,選擇 使用者 節點。 新帳號會出現在清單中。

設定應用程式池以使用新的本地使用者帳號

  1. 開啟 IIS) Manager (網際網路資訊服務。
  2. 在左側窗格中,展開目前伺服器的節點。
  3. 展開 應用程式池 節點。
  4. 右鍵點擊目標應用程式池,然後點 選屬性
  5. 點擊 「身份」 標籤。
  6. 選擇 可設定 選項按鈕。
  7. 輸入新帳號的使用者名稱和密碼。
  8. 按一下 [確定]
  9. 「確認密碼 」對話框重新輸入密碼,然後點擊 確定

網際網路資訊服務 7 與 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 及 Windows Server 2008 R2)

  1. 開啟 IIS) Manager (網際網路資訊服務。
  2. Connections 面板中,展開目前伺服器的節點。
  3. 選擇應用程式池節點。
  4. 選擇目標應用程式池。
  5. 動作 面板中,點選 進階設定 連結。
  6. 程序模型 區塊中,將 Identity 屬性設為 ApplicationPoolIdentity。 此設定會自動為該應用池建立唯一身份。 在接下來的章節中,你可以利用這個唯一身份來設定應用程式需要存取的檔案位置 (DACL) 的自由存取控制清單。
  7. 按一下 [確定]

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

DACL) (的自由裁量存取控制清單是一份與物件相關聯的權限清單,可用來控制對該物件的存取。 使用 DACL 限制對應用程式內容的存取,有助於加強同一伺服器上托管網站間的隔離。 欲了解更多關於 ACL 與 IIS 身份的資訊,請參閱 透過檔案系統 ACL 的 IIS 安全內容

所有版本的 IIS

  1. 請在命令提示字元或 Windows 檔案總管中開啟該網站內容的根目錄。

  2. 請使用以下任一方法移除非管理員存取此地點的條目。 (這也包括使用者群組 )

    • 在 Windows 檔案總管中,右鍵點擊資料夾,選擇 屬性,點選 安全性 標籤,然後更改存取控制清單。
    • 在命令提示字元時,使用舊版 Windows 作業系統) 的 icacls.exe 工具 (或 cacls.exe 來更改存取控制清單。
  3. 新增一個你為該網站選擇的程序身份的新條目。

  4. 給新身份 Read and Execute 資料夾存取權。

                
如果某些資料夾需要 (應用程式的寫入權限,例如「上傳」資料夾) ,請依照以下步驟操作:

網際網路資訊服務 6.0 (Windows Server 2003 SP2)

  1. 在 Windows 檔案總管中,右鍵點擊資料夾,選擇 屬性,點選 安全性 標籤,並為程序身份新增 修改 權限。

  2. 對於將包含靜態內容 (圖片、文字檔等) 的資料夾,請依照以下步驟操作:

    1. 開啟 IIS) Manager (網際網路資訊服務。
    2. 在左側窗格,右鍵點擊對應的資料夾名稱,然後點選 屬性
    3. 點擊 目錄 標籤。
    4. 執行權限清單中,選擇「無」。

網際網路資訊服務 7 與 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 及 Windows Server 2008 R2)

  1. 在 Windows 檔案總管中,右鍵點擊資料夾,選擇 屬性,點選 安全性 標籤,並為程序身份新增 修改 權限。

  2. 對於會包含靜態內容 (圖片、文字檔等的資料夾,) 中新增一個「web.config」檔案條目,該位置不允許使用腳本權限:

    <system.webServer>
    <處理器 accessPolicy=“Read, Write” />
    </system.webServer>

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

ASP.NET 需要伺服器上有位置來儲存暫存資料,例如已編譯的檔案。 這通常是暫存 ASP.NET Files資料夾。 預設情況下,這個資料夾位於安裝 .NET Framework 的資料夾下方。 為每個站點分配不同的臨時位置,並適當地保護資料夾,有助於加強同一伺服器上架設站點間的隔離。 欲了解更多關於暫存 ASP.NET Files資料夾的資訊,請參閱「理解動態編譯 ASP.NET」。

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

  1. 為每個網站建立一個新資料夾,用來存放該網站的臨時 ASP.NET 檔案。 最好使用非系統磁碟機來儲存暫存檔案。
  2. 在伺服器的根 web.config 或 applicationHost.config 檔案中,請設定使用位置>元素指向該網站<新資料夾的位置,例如:
    <配置>
    <位置路徑=「路徑」>
    <system.web>
    <compilation tempDirectory=“temp-files-path” />
    </system.web>
    </地點>
    <--等等——>
    </配置>

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

  1. 請使用命令提示字元或 Windows 檔案總管移除非管理員存取權限。 (這也包括使用者群組 )
  2. 新增一個你先前為該網站選擇的程序身份的新條目,然後賦予該身份「 修改 」資料夾的權限。

如何從根組設定檔中移除敏感的設定資料

應用程式 web.config 檔案位於所服務應用程式的內容資料夾中。 雖然 ASP.NET 不會提供應用程式 web.config 檔案,但在實際情況下,最好將安全敏感資訊(如機器金鑰設定和連線字串)放在應用程式位置外的設定檔中。 這為資訊洩露增添了抗辯理由。

網際網路資訊服務 6.0 (Windows Server 2003 SP2)

將安全敏感的設定資訊儲存在根 web.config 檔案中,並非隔離不同站點資料的好選擇,因為所有站點都擁有該檔案的讀取權限。 因此,在 IIS 6 上,你應該將敏感設定儲存在應用程式 web.config 檔案中。 這讓網站能夠彼此隔離敏感配置。 在這種情況下,您的申請將依賴 ASP.NET 辯護措施,以防止申請 web.config 檔案被送達,並確保敏感資訊不會被揭露。

網際網路資訊服務 7 與 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 及 Windows Server 2008 R2)

對於 IIS 7 及更新版本,將 IIS applicationHost.config 檔案中的敏感配置移至<>一個位置元素,將配置範圍範圍至適用的站點。 欲了解更多資訊,請參閱 《如何在 IIS 7.0 配置中使用鎖定》。 Microsoft 感謝 以下人員與我們合作,協助保護客戶: