发布ASP.NET网站是否会带来额外的安全性好处?

时间:2010-11-15 06:20:57

标签: c# asp.net security

我来自PHP / Rails背景,其中部署网站通常意味着在Web服务器上正确的目录中FTP / Checkout源代码。

但是,我被要求开发一个ASP.NET网站,有些人建议我“发布”该网站,而不是直接复制源代码。显然,这会将代码隐藏(.cs)文件转换为已编译的DLL等。

我的应用程序不包含任何特定的秘密业务逻辑。这是一个常见的购物车应用程序。我的问题是,这是一个好主意吗?如何使C#代码驻留在服务器上使应用程序更安全?

4 个答案:

答案 0 :(得分:6)

ASP.NET代码将始终被编译 - 或者:

  1. 在运行时 - 您可以复制.ASPX和 .CS文件到服务器。当一个页面 请求.ASPX和.CS文件 将在飞行中编译。该 ASP.NET运行时将创建一个DLL 包含已编译的代码(此 住在名为Temporary的文件夹中 ASP.NET文件和位置 取决于.NET的版本 你正在使用)。
  2. 预编译 - 您可以选择在将代码部署到服务器之前编译代码。这就是 Publish 命令在Visual Studio中的作用。它将.ASPX和.CS文件编译为(一个或多个)DLL,然后将其上载到Web服务器。
  3. 就个人而言,我认为部署预编译代码并不会带来很多安全好处(除非你是obfuscating your pre-compiled DLLs)。

    那说我更喜欢这些好处:

    • 至少对我来说,似乎比在文件夹中散布着一堆.CS文件更整洁
    • 不必进行C#编译有一个小的性能优势。请注意,您的代码仍需要从IL到本机代码进行JIT,这仍会导致初始请求性能下降(除非您使用new ASP.NET 4.0 and IIS 7.5 featuressomething else)。
    • 发布功能可让您将应用程序打包以部署到其他环境(测试,预生产,生产等)。

    注意:来自Rails / PHP,您可能希望继续将.ASPX和.CS文件部署到您的服务器。好处是,以您可能习惯的方式修改正在运行的应用程序更容易。如果您遵循严格的部署生命周期,这不是一个很好的做法,但在某些情况下它可能很有用。

答案 1 :(得分:2)

我可以对预编译添加一个,这主要是关于安全性和性能;编译检查!!如果没有预编译,您可以轻松上传包含错误的一些代码文件,但在第一个用户使用此代码文件访问页面的13天之后无法找到。这是因为asp.net只会在需要时一次编译一个文件。

通过预编译,将编译所有文件,并立即捕获所有编译器错误。

尽管有关预编译的全部内容,但发布不仅仅是关于此。

另一个重要因素是您可以指示msbuild在发布期间执行的步骤。也许最重要的是web.config转换,你可以在这里阅读http://msdn.microsoft.com/en-us/library/dd465318.aspx。基本上,您可以创建一个转换文件,在发布期间将根据发布目标替换/添加/删除web.config中的值。

答案 2 :(得分:0)

是的,它更多的是关于编译而不是其他任何东西。为了能够运行网站,必须编译C#代码,这就是发布步骤所做的,同时将其转移到特定位置。

您桌面上的网站版本是开发版本,很可能是编译代码的调试版本。但是,在发布步骤中,您应该生成已编译代码的发行版本,这也会提高性能。

可以将ASP.net的发布步骤与创建普通Windows应用程序的安装程序进行比较,并在发布到运营服务器时将安装步骤合并。

答案 3 :(得分:0)

您的c#代码仍然驻留在服务器上,它只是作为编译代码驻留,而不是像PHP / Rails中习惯的那样以脚本的形式存在。

在PHP,rails或经典ASP中,您可以将脚本和xcopy / ftp写入Web服务器。然后PHP解释器会在每次Web请求进入时解析脚本,而在asp.net中编译代码然后将其复制到Web服务器,因此当Web请求进入时,执行速度会快得多。

将其广泛地视为在服务器上部署.exe文件与在文本文件中编写程序并使编译器解析文本文件并每次运行它。

它与更安全无关。

顺便说一下 - Bluebells学校之后的生活: - )