我有一个记录异常条带跟踪的应用程序,我希望这些堆栈跟踪在生产中部署时包含文件名和行号.我想出了如何使用程序集部署调试符号,但在研究问题的过程中我遇到了这个问题,这意味着在生产环境中包含pdb文件并不是一个好主意.对接受的答案的评论说:"......调试信息可以泄露敏感数据并成为攻击媒介.取决于你的应用程序是什么."
那么可能会暴露哪种敏感数据呢?如何使用调试符号来破坏应用程序?我对技术细节很好奇,但我真正想要的是一种评估任何给定应用程序和生产环境中包含调试符号的风险的实用方法.换句话说:可能发生的最坏情况是什么?
编辑:后续问题/澄清
因此,基于目前为止每个人的答案,似乎这个问题可以简化为.NET应用程序.这篇来自John Robbins的博客链接在迈克尔·马多克斯的答案中,有点向我跳了出来:
.NET PDB仅包含两条信息,源文件名及其行和本地变量名.所有其他信息都已包含在.NET元数据中,因此无需在PDB文件中复制相同的信息.
对我来说,这重申了其他人对Reflector所说的话,其含义是真正的问题是访问程序集.一旦确定了,关于PDB的唯一决定是你是否关心暴露文件名,行号和本地变量名(假设你没有向最终用户展示堆栈跟踪).或者我过度简化了这个?
我应该何时在生产版本中包含PDB文件?我应该使用该Optimize code标志,这将如何影响我从异常中获得的信息?
如果有明显的性能优势,我会想要使用优化,但如果不是,我宁愿有准确的调试信息.通常为生产应用程序做什么?