我来自PHP/Rails背景,在部署网站时通常意味着在Web服务器上正确的目录中使用FTP/源代码进行检出。
然而,我被要求开发一个ASP.NET网站,并且有些人建议我“发布”网站,而不是直接复制源代码。显然,这会将codebehind(.cs)文件转换为已编译的DLL等。
我的应用程序不包含任何特定的机密业务逻辑。这是一个普通的购物车应用程序。我的问题是这是否是一个好主意?不让C#代码驻留在服务器上如何使应用程序更安全?
ASP.NET代码始终会被编译,可以通过以下两种方式实现:
就我个人而言,我认为部署预编译代码没有太大的安全优势(除非您正在混淆预编译的DLL)。
虽然如此,我还是喜欢预编译代码,因为有以下好处:
注意:如果您来自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 School之后的生活如何?:-)