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