将 .NET PDB 文件保存在真实服务器上是否存在任何安全问题?
我知道抛出异常可能需要更长的时间,但是在正常执行期间谁会抛出异常呢?:-)
但是从安全的角度来看呢?有什么问题吗?
如果您的系统使用 PDB 不安全,那么没有它们可能就不安全。显然,这取决于更好的错误报告对您的价值。就个人而言,我非常重视这一点,因此倾向于部署 PDB。
我认为一个公平的论点是不将 PDB 留在实时服务器上是一种风险。在生产崩溃并且问题无法在 dev 或 UAT 上重现的情况下,诊断错误发生的位置要花费更多时间(并且可能是不可能的)。
至少,与部署的 DLL 匹配的 PDB应该位于生产服务器上某处的 ZIP 文件中。他们应该很容易被您以外的人找到,以防您不在身边提供帮助。
另请参阅PDB 文件: John Robbins 的每个开发人员必须知道的内容。
将 .PDB 文件发布到您的网站时可能遇到的唯一问题是发生异常时,您忘记在 web.config 中设置 CustomErrors 属性。堆栈跟踪将显示文件名和行号,这可能是一个安全问题。
我认为没有其他风险。
如果服务器是 IIS,则没有。如果保存在正确的位置(网站\bin),这些文件将不会向公众公开。偶尔我会在 Web 服务器上找到中间(obj 目录)文件——这似乎是意外公开二进制文件的一种最喜欢的方式。在您的 pdb 可见的任何情况下,您的 dll 也可见,这更糟。
正如 activa 所指出的,堆栈跟踪对于有或没有行号的黑客来说非常有用。保持私密。
我假设您可能在真实服务器上运行的任何其他程序 - 服务等 - 根本无法公开访问。
基本上,PDB 就在源代码之下,而 ASP.NET/IIS 也不会阻止它们被下载。
现在肯定人们必须猜测程序集名称,这可能不太可能,但为什么要冒险呢?
嗯 - 我会在这方面倾向于安全谨慎。我认为你应该有 PDB,但不是在生产服务器上。此外,您应该在任何实时系统上关闭调试。调试是讨厌的,当你不需要它的时候你就是不想要它。
来自斯科特·格思里:
在您的 machine.config 中设置部署零售=true:
<configuration>
<system.web>
<deployment retail="true"/>
</system.web>
</configuration>
这将覆盖调试、错误和跟踪设置,这将防止计算机本身之外的任何错误泄露。
既然您已经关闭了调试,没有错误或跟踪,为什么要将 PDB 部署到生产服务器?将它们存储在其他地方,甚至可能是您的开发服务器。从开发到生产的代码升级脚本可以明确排除 PDB,但将它们存档,以便在需要进行生产调试时可用。