Asp.net

ASP.NET MVC 應用程序的性能和安全性 - 處理程序映射和模組

  • September 18, 2012

我剛剛讀了一篇有趣的文章。基本上它說,您應該以兩種方式微調每個應用程序的 IIS 設置:

  1. 處理程序映射 - 刪除所有未使用的應用程序
  2. 模組 - 刪除應用程序未使用的所有模組

好吧,我開發 ASP.NET 已經有一段時間了,甚至在工作中,我們從來沒有在生產環境 afaik 上這樣做過。我理解所提出的理論優勢 - 最大限度地減少應用程序的“表面”(安全性),並提高性能。但是我真的很好奇,如果您在現實生活中這樣做(為您的客戶提供的實際項目,而不是概念驗證項目)。這有什麼缺點(可能是可維護性?)。最重要的問題——值得嗎?例如,性能提升是否可見?

此外,如果您認為這是一個很好的做法,請提供一些良好且一致的方式(或指向我的教程),您如何準確地執行此過程 - 您如何決定保留哪些內容以及刪除哪些內容。

例如,ASP.NET MVC 3 應用程序的最小但工作集是什麼,它使用自定義身份驗證(基於會話,不依賴於 Forms 身份驗證、Windows 身份驗證等),沒有 Web 服務和類似功能?

編輯

我找到了這篇文章: http: //madskristensen.net/post/Remove-default-HTTP-modules-in-ASPNET.aspx

在其中,斯科特·格思裡說:

一般來說,使用這種方法可以獲得一些非常小的性能提升——儘管我可能不建議這樣做。原因是 ASP.NET 的某些功能(表單身份驗證、角色、記憶體等)當然會在您刪除它們所依賴的模組後停止工作。試圖弄清楚為什麼會發生這種情況往往會令人困惑。

但是仍然沒有測量,實踐(我並不真正相信“你以後會感到驚訝”的論點:)

值得一提的是,IIS 8 的安全最佳實踐有:

  • 僅安裝您需要的 IIS 模組。

IIS 8 由 40 多個模組組成,允許您添加您需要的模組並刪除您不需要的任何模組。如果您只安裝您需要的模組,您可以減少暴露於潛在攻擊的表面積。

  • 定期刪除未使用或不需要的模組和處理程序。

查找不再使用的模組和處理程序,並將它們從 IIS 安裝中刪除。努力使您的 IIS 表面積盡可能小。

IIS 模組概述還提供 IIS 模組參考,其中每個模組都有一個名為“刪除此模組時的潛在問題”的部分。例如,如果 DefaultAuthentication 模組被刪除:

如果 ASP.NET 身份驗證模式為 Forms,則某些 ASP.NET 功能可能不適用於匿名請求。此外,不會引發 DefaultAuthentication.OnAuthenticate 事件。

<modules runAllManagedModulesForAllRequests="false">
 <!-- disable authorization section -->
 <remove name="UrlAuthorization" />
 <!-- disable unused authentication schemes -->
 <remove name="WindowsAuthentication" />
 <remove name="PassportAuthentication" />
 <!-- disable ACL file and directory check -->
 <!-- <remove name="FileAuthorization" /> -->
 <!-- We don't use ASP.NET Profiles -->
 <remove name="Profile" />
 <!-- We don't provide any WCF service -->
 <remove name="ServiceModel" />
 <!-- Remove modules not used by ASP.NET MVC + jQuery -->
 <remove name="ScriptModule-4.0" />
</modules>

引用自:https://stackoverflow.com/questions/8048843