我有一个记录异常跟踪跟踪的应用程序,我希望这些堆栈跟踪在生产中部署时包含文件名和行号。我想出了如何使用程序集部署调试符号,但是在研究这个问题的过程中,我遇到了这个问题,这意味着在生产环境中包含 pdb 文件不是一个好主意。对已接受答案的评论说“......调试信息可能会泄露敏感数据并成为攻击媒介。取决于您的应用程序是什么。”
那么什么样的敏感数据可能会被暴露呢?如何使用调试符号来破坏应用程序?我对技术细节很好奇,但我真正想要的是一种实用的方法来评估在任何给定应用程序和生产环境中包含调试符号的风险。或者换一种说法:可能发生的最坏情况是什么?
编辑:后续问题/澄清
因此,根据到目前为止每个人的回答,对于 .NET 应用程序来说,这个问题似乎可以简化一点。迈克尔·马多克斯(Michael Maddox)的回答中链接的约翰·罗宾斯( John Robbins)博客中的这一点让我大吃一惊:
.NET PDB 仅包含两条信息,源文件名及其行和局部变量名。所有其他信息都已在 .NET 元数据中,因此无需在 PDB 文件中复制相同的信息。
对我来说,这重申了其他人对 Reflector 的看法,暗示真正的问题是访问程序集。一旦确定了这一点,就 PDB 做出的唯一决定是您是否关心公开文件名、行号和局部变量名(假设您一开始没有向最终用户显示堆栈跟踪)。还是我过于简单化了?