【问题标题】:Does publishing an ASP.NET website give any extra security benefits?发布 ASP.NET 网站是否会带来额外的安全优势?
【发布时间】:2010-11-15 23:55:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net security


    【解决方案1】:

    ASP.NET 代码将始终被编译 - 要么:

    1. 在运行时 - 您可以复制 .ASPX 和 .CS 文件到服务器。当一个页面 请求 .ASPX 和 .CS 文件 将即时编译。这 ASP.NET 运行时将创建一个 DLL 包含编译的代码(这 位于一个名为 Temporary 的文件夹中 ASP.NET 文件和位置 取决于 .NET 的版本 您正在使用)。
    2. 预编译 - 您可以选择在将代码部署到服务器之前对其进行编译。这就是 Publish 命令在 Visual Studio 中的作用。它将您的 .ASPX 和 .CS 文件编译成(一个或多个)DLL,然后上传到网络服务器。

    就我个人而言,我认为部署预编译代码并没有太多安全优势(除非您是 obfuscating your pre-compiled DLLs)。

    也就是说我更喜欢它,因为它有这些好处:

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

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

    【讨论】:

      【解决方案2】:

      不过,我可以在预编译中添加一个内容,这主要是关于安全性和性能的;编译器检查!!无需预编译,您可以轻松上传一些包含错误的代码文件,但在第一个用户使用此代码文件点击页面的 13 天后才能发现。这是因为 asp.net 在需要时一次只编译一个文件。

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

      这就是预编译的全部内容,但发布不仅仅与此有关。

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

      【讨论】:

        【解决方案3】:

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

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

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

        这与是否更安全无关。

        顺便说一句 - Bluebells School 之后的生活怎么样 :-)

        【讨论】:

        • 请记住,在 .net 中,文本文件只编译一次,并且生成的 dll 会一直使用到文本文件更改,而不是每次请求时。
        • 您似乎认识我,但我无法从您的 SO 个人资料中猜出您是谁。可以给我发邮件吗?
        【解决方案4】:

        是的,编译比其他任何事情都重要。为了使网站能够运行,必须编译 C# 代码,这就是发布步骤所做的,以及将其传输到特定位置。

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

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

        【讨论】:

        • 您可以轻松发布调试版本,发布与调试与发布无关。您对安装程序类比是正确的,因为您可以在发布阶段定义 msbuild 应该执行的步骤、对 web.config 进行转换、复制/创建/删除文件等,否则您应该使用 pure 手动执行的操作xcopy 部署。
        猜你喜欢
        • 1970-01-01
        • 2015-05-14
        • 2014-07-04
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 2011-05-19
        • 2011-09-25
        • 2011-01-16
        相关资源
        最近更新 更多