簡體   English   中英

發布ASP.NET網站是否會帶來額外的安全性好處?

[英]Does publishing an ASP.NET website give any extra security benefits?

我來自PHP / Rails背景,其中部署網站通常意味着在Web服務器上的正確目錄中FTP / Checkout源代碼。

但是,我被要求開發一個ASP.NET網站,有些人建議我“發布”該網站,而不是直接復制源代碼。 顯然,這會將代碼隱藏(.cs)文件轉換為已編譯的DLL等。

我的應用程序不包含任何特定的秘密業務邏輯。 這是一個常見的購物車應用程序。 我的問題是,這是一個好主意嗎? 如何使C#代碼駐留在服務器上使應用程序更安全?

ASP.NET代碼將始終被編譯 - 或者:

  1. 在運行時 - 您可以將.ASPX和.CS文件復制到服務器。 請求頁面時,將動態編譯.ASPX和.CS文件。 ASP.NET運行時將創建一個包含已編譯代碼的DLL(它位於名為Temporary ASP.NET files的文件夾中,其位置取決於您正在使用的.NET版本)。
  2. 預編譯 - 您可以選擇在將代碼部署到服務器之前編譯代碼。 這是Publish命令在Visual Studio中的作用。 它將.ASPX和.CS文件編譯為(一個或多個)DLL,然后將其上載到Web服務器。

就個人而言,我認為部署預編譯代碼並不會帶來很多安全好處(除非您對預編譯的DLL進行模糊處理 )。

那說我更喜歡這些好處:

  • 至少對我來說,似乎比在文件夾中散布一堆.CS文件更整潔
  • 無需進行C#編譯有一個小的性能優勢。 請注意,您的代碼仍然需要從IL到本機代碼進行JIT,這仍然會導致初始請求性能受到影響(除非您使用新的ASP.NET 4.0和IIS 7.5功能其他功能 )。
  • 發布功能允許您將應用程序打包以部署到其他環境(測試,預生產,生產等)

注意:來自Rails / PHP,您可能希望繼續將.ASPX和.CS文件部署到您的服務器。 好處是,以您可能習慣的方式修改正在運行的應用程序更容易。 如果您遵循嚴格的部署生命周期,這不是一個很好的做法,但在某些情況下它可能很有用。

我可以在預編譯中添加一個,這主要是關於安全性和性能; 編譯檢查!! 如果沒有預編譯,您可以輕松上傳包含錯誤的一些代碼文件,但在第一個用戶使用此代碼文件訪問頁面的13天之后無法找到。 這是因為asp.net只在需要時一次編譯一個文件。

通過預編譯,將編譯所有文件,並立即捕獲所有編譯器錯誤。

這些都是關於預編譯的,但發布不僅僅是關於那個。

另一個重要因素是您可以指示msbuild在發布期間執行的步驟。 也許最重要的是web.config轉換,你可以在這里閱讀http://msdn.microsoft.com/en-us/library/dd465318.aspx 基本上,您可以創建一個轉換文件,在發布期間將根據發布目標替換/添加/刪除web.config中的值。

是的,它更多的是關於編譯而不是其他任何東西。 為了能夠運行網站,必須編譯C#代碼,這就是發布步驟所做的,同時將其傳輸到特定位置。

您桌面上的網站版本是開發版本,很可能是編譯代碼的調試版本。 但是,通過發布步驟,您應該生成已編譯代碼的發行版本,這也會提高性能。

可以將ASP.net的發布步驟與創建普通Windows應用程序的安裝程序進行比較,並在發布到操作服務器時將安裝步驟組合在一起。

您的c#代碼仍然駐留在服務器上,它只是作為編譯代碼駐留,而不是像PHP / Rails中習慣的那樣以腳本的形式存在。

在PHP,rails或經典ASP中,您可以將腳本和xcopy / ftp寫入Web服務器。 然后PHP解釋器會在每次Web請求進入時解析腳本,而在asp.net中編譯代碼然后將其復制到Web服務器,因此當Web請求進入時,執行速度會快得多。

可以想象它在服務器上部署.exe文件,而不是在文本文件中編寫程序,並使編譯器解析文本文件並每次運行它。

它與更安全無關。

順便說一句 - Bluebells學校之后的生活:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM