【问题标题】:Is there any reason not to deploy pdb files to a production web server?是否有任何理由不将 pdb 文件部署到生产 Web 服务器?
【发布时间】:2014-02-19 17:25:29
【问题描述】:

我正在开发一个 ASP.NET 网站,我想部署 pdb 文件,因为当抛出意外异常时,我想用行号记录它们,以便我可以跟踪解决问题。

但我担心安全性能

如果我使用堆栈跟踪信息登录到网络服务器上的非公共文件并且不向用户显示它,那么在网络服务器上拥有 pdb 文件是否存在任何安全风险?

就性能而言,我知道当有 pdb 文件时处理异常会更昂贵,但目标是不出现任何异常,并且在它们发生的极少数情况下,以获得良好的跟踪数据,所以我们可以解决问题。

但我不清楚的一件事是:如果抛出并捕获了异常,我还要支付 pdb 罚款吗?我特别想到Response.Redirect 时抛出的ThreadAbortException。这是一个遗留应用程序,其中有很多作为正常程序流程的一部分,所以我只是捕获并忽略这些异常,但是 pdb 文件的存在是否会使这变得更加昂贵?还是 .NET 会忽略 pdb 文件,除非您要求堆栈跟踪(对于这个特殊的异常,我没有)?

除此之外,只要没有例外,除了我确实想详细了解的情况,将 pdb 文件部署到 Web 服务器是否会影响性能?

【问题讨论】:

    标签: asp.net .net debugging


    【解决方案1】:

    至于安全性,我看不出部署 PDB 有什么真正的问题。 PDB 只包含

    • 源代码行和 IL 偏移之间的映射
    • 当地人的名字
    • 源文件的名称
    • 与给定函数相关的using 指令列表

    即使 PDB 信息被泄露,我也不会考虑任何敏感信息

    就性能而言,仅仅存在 PDB 不会改变应用程序的执行逻辑。它仅与调试目的相关,正常执行不会与之交互

    【讨论】:

    • 感谢您的快速回复。你能具体评论一下 ThreadAbortException 场景吗?如果应用程序重定向并抛出其中之一,而我捕捉并忽略它,我是否需要支付 pdb 查找罚金?
    • @JoshuaFrank 我仍然不清楚为什么您认为异常会完全引用 PDB。他们可能会这样做,但据我所知,他们没有
    • 我想我不清楚 pdb 文件何时用于查找符号。是在抛出异常时,还是在您的异常处理程序代码要求堆栈跟踪数据时?我之所以特别询问,是因为对另一个 SO 问题的评论,在问题的上下文中,这听起来像是您在抛出异常时支付了查找成本:stackoverflow.com/questions/381537/…
    • @JoshuaFrank 这似乎仅在调用 StackTrace 属性时发生。建立文件名的所有逻辑都发生在这里 AFAICT
    • 啊,这正是我所希望的,除非您确实需要数据,否则它不会进行昂贵的查找是有道理的。感谢您的所有帮助!
    【解决方案2】:

    我同意 JaredPar 的观点,但您可能会认为,如果服务器被黑客入侵,他列出的大部分内容都可以让您的网站更容易反编译和逆向工程。

    另一方面,在没有 PDB 的情况下进行逆向工程也相对容易(尽管需要做更多的工作),所以它只是一个很小的安全风险。此外,根据您网站的范围,逆向工程甚至可能不是问题。

    【讨论】:

      【解决方案3】:

      您想要部署您希望获得额外调试好处的 PDB 文件,例如额外的信息行号,以及在抛出异常时用于堆栈跟踪的目的,以及应用程序的remote debugging。需要注意的是,使用 .pdb 调试时,异常处理往往会执行得较慢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 2020-01-18
        • 2019-01-05
        相关资源
        最近更新 更多