簡介
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)
- 開啟 IIS) Manager (網際網路資訊服務。
- 在左側窗格中,展開目前伺服器的節點。
- 右鍵點擊 網站 節點,點 選新網站,然後點擊 網站。
- 按一下 [下一步]。
- 輸入新網站的唯一名稱,然後點擊 「下一步」。
- 設定主機環境的網站綁定。
- 輸入存放應用程式檔案的資料夾的物理路徑。
- 點擊選擇 執行腳本 (如 ASP) 勾選框,然後點擊 「下一步」。
- 按一下 [完成]。 新網站會出現在 網站 節點下。
網際網路資訊服務 7 (Windows Vista SP2 與 Windows Server 2008 SP1) ,以及網際網路資訊服務 7.5 (Windows 7 與 Windows Server 2008 R2)
- 開啟 IIS) Manager (網際網路資訊服務。
- 在 Connections 面板中,展開目前伺服器的節點。
- 選擇網站節點,然後在動作窗格中點擊新增網站連結。
- 在 新增網站 對話框中,輸入新網站的唯一名稱,然後輸入存放應用程式檔案資料夾的實體路徑。 預設情況下,會建立一個與該網站名稱相同的新應用程式池,並設定該應用池使用該應用程式池。 (這是推薦的配置 )
- 設定主機環境的網站綁定。
- 點擊清除「 立即開始網站 」的勾選框,以確保該網站在完成此處所述隔離指引前無法使用。
- 按一下 [確定]。 已設定的網站會出現在連接面板的「網站」節點下。
如何將網站放入不同的應用程式池
在共享主機環境中,應用程式應該被放在獨立的應用程式池中。 這使得應用程式能夠被隔離成具有唯一身份的獨立作業系統程序。 這提供了從一個地點到另一個地點的隔離。 (以下章節說明如何設定應用程式池身份以進行隔離 )
網際網路資訊服務 6.0 (Windows Server 2003 SP2)
- 開啟 IIS) Manager (網際網路資訊服務。
- 在左側窗格中,展開目前伺服器的節點。
- 右鍵點擊 「應用程式池」,點 選「新」,然後點 選「應用程式池」。
- 輸入新申請池的唯一名稱,然後點擊 確定。
- 展開 網站 節點。
- 右鍵點擊目標網站,然後點 選「屬性」。
- 點擊 「家庭目錄 」標籤。
- 在對話框底部的 應用程式池 欄位,選擇新的應用程式池。
- 按一下 [確定]。
網際網路資訊服務 7 (Windows Vista SP2 與 Windows Server 2008 SP1) ,以及網際網路資訊服務 7.5 (Windows 7 與 Windows Server 2008 R2)
在「如何將應用程式放入不同的 IIS 站點」步驟後,新站點會自動被放入一個新的獨立申請池。 不過,如果你必須將現有站點配置為使用新的獨立應用程式池,請依照以下步驟操作:
- 開啟 IIS) Manager (網際網路資訊服務。
- 在 Connections 面板中,展開目前伺服器的節點。
- 選擇應用程式池節點。
- 在 動作 面板中,點選 「新增應用程式池 」連結。
- 輸入新應用程式池的唯一名稱,然後選擇目標的 .NET Framework 版本與管線模式。
- 按一下 [確定]。 新的應用程式池會顯示在清單中。
- 在 連結 面板中,展開 網站 節點。
- 在此過程中選擇你想移至先前建立的應用程式池的網站。
- 在 動作 面板中,點擊 基本設定 連結。
- 在 編輯網站 對話框中,點擊 選擇。
- 在 應用程式池 清單中,選擇你之前建立的應用程式池。
- 按一下 [確定]。
在 編輯網站 對話框中,點擊 確定。
如何配置應用程式池以隔離 (程序身份)
應用程式池在 Windows 程序中 (或) 的程序中托管應用程式與站點。 程序執行的身份是可設定的。 在共享主機環境中,每個應用程式應該有獨立的身份。 這確保每個應用程式都在一個獨特的帳號環境中執行。 這允許透過檔案系統的自由存取控制清單 (DACL) 以及底層作業系統內建的程序隔離功能,實現正確的隔離。 要建立使用者帳號並指派一個應用程式池來使用該帳號,請依照以下步驟操作。
網際網路資訊服務 6.0 (Windows Server 2003 SP2)
建立一個本地使用者帳號作為應用程式池的身份
- 開啟 IIS) Manager (網際網路資訊服務。
- 在左側窗格中,展開 「本地使用者與群組」。
- 右鍵點擊 使用者 節點,然後點 選新使用者。
- 輸入一個獨特的名稱和強密碼,為新使用者帳號設定。
- 點擊以清除「 使用者必須在下次登入時更改密碼」 的勾選框。
- 點擊選擇 「使用者無法更改密碼 」的勾選框。
- 點選 「建立」,然後「 關閉」。
- 在左側窗格中,選擇 使用者 節點。 新帳號會出現在清單中。
設定應用程式池以使用新的本地使用者帳號
- 開啟 IIS) Manager (網際網路資訊服務。
- 在左側窗格中,展開目前伺服器的節點。
- 展開 應用程式池 節點。
- 右鍵點擊目標應用程式池,然後點 選屬性。
- 點擊 「身份」 標籤。
- 選擇 可設定 選項按鈕。
- 輸入新帳號的使用者名稱和密碼。
- 按一下 [確定]。
- 在 「確認密碼 」對話框重新輸入密碼,然後點擊 確定。
網際網路資訊服務 7 與 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 及 Windows Server 2008 R2)
- 開啟 IIS) Manager (網際網路資訊服務。
- 在 Connections 面板中,展開目前伺服器的節點。
- 選擇應用程式池節點。
- 選擇目標應用程式池。
- 在 動作 面板中,點選 進階設定 連結。
- 在 程序模型 區塊中,將 Identity 屬性設為 ApplicationPoolIdentity。 此設定會自動為該應用池建立唯一身份。 在接下來的章節中,你可以利用這個唯一身份來設定應用程式需要存取的檔案位置 (DACL) 的自由存取控制清單。
- 按一下 [確定]。
如何在應用程式內容位置設定 DACL
DACL) (的自由裁量存取控制清單是一份與物件相關聯的權限清單,可用來控制對該物件的存取。 使用 DACL 限制對應用程式內容的存取,有助於加強同一伺服器上托管網站間的隔離。 欲了解更多關於 ACL 與 IIS 身份的資訊,請參閱 透過檔案系統 ACL 的 IIS 安全內容
所有版本的 IIS
請在命令提示字元或 Windows 檔案總管中開啟該網站內容的根目錄。
請使用以下任一方法移除非管理員存取此地點的條目。 (這也包括使用者群組 )
- 在 Windows 檔案總管中,右鍵點擊資料夾,選擇 屬性,點選 安全性 標籤,然後更改存取控制清單。
- 在命令提示字元時,使用舊版 Windows 作業系統) 的 icacls.exe 工具 (或 cacls.exe 來更改存取控制清單。
新增一個你為該網站選擇的程序身份的新條目。
給新身份 Read and Execute 資料夾存取權。
如果某些資料夾需要 (應用程式的寫入權限,例如「上傳」資料夾) ,請依照以下步驟操作:
網際網路資訊服務 6.0 (Windows Server 2003 SP2)
在 Windows 檔案總管中,右鍵點擊資料夾,選擇 屬性,點選 安全性 標籤,並為程序身份新增 修改 權限。
對於將包含靜態內容 (圖片、文字檔等) 的資料夾,請依照以下步驟操作:
- 開啟 IIS) Manager (網際網路資訊服務。
- 在左側窗格,右鍵點擊對應的資料夾名稱,然後點選 屬性。
- 點擊 目錄 標籤。
- 在執行權限清單中,選擇「無」。
網際網路資訊服務 7 與 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 及 Windows Server 2008 R2)
在 Windows 檔案總管中,右鍵點擊資料夾,選擇 屬性,點選 安全性 標籤,並為程序身份新增 修改 權限。
對於會包含靜態內容 (圖片、文字檔等的資料夾,) 中新增一個「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資料夾位置
- 為每個網站建立一個新資料夾,用來存放該網站的臨時 ASP.NET 檔案。 最好使用非系統磁碟機來儲存暫存檔案。
- 在伺服器的根 web.config 或 applicationHost.config 檔案中,請設定使用位置>元素指向該網站<新資料夾的位置,例如:
<配置>
<位置路徑=「路徑」>
<system.web>
<compilation tempDirectory=“temp-files-path” />
</system.web>
</地點>
<--等等——>
</配置>
如何在暫存 ASP.NET Files資料夾位置設定適當的 DACL
- 請使用命令提示字元或 Windows 檔案總管移除非管理員存取權限。 (這也包括使用者群組 )
- 新增一個你先前為該網站選擇的程序身份的新條目,然後賦予該身份「 修改 」資料夾的權限。
如何從根組設定檔中移除敏感的設定資料
應用程式 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 感謝 以下人員與我們合作,協助保護客戶: