我有一个记录异常跟踪的应用程序,我希望这些堆栈跟踪在部署到生产环境时包含文件名和行号。我弄明白了如何在程序集中部署调试符号,但是在研究这个问题的过程中,我遇到了 这个问题,这意味着在生产环境中包含 pdb 文件不是一个好主意。对已接受答案的评论说: “ ... ... 调试信息可能泄露敏感数据,并成为攻击载体。这取决于你的应用程序是什么。”
那么什么样的敏感数据可能会暴露呢?如何使用调试符号来破坏应用程序?我对技术细节感到好奇,但我真正寻找的是一种实用的方法来评估在任何给定的应用程序和生产环境中包含调试符号的风险。或者换句话说: 最坏的情况又能怎样呢?
编辑: 后续问题/澄清
所以基于目前为止大家的回答,这个问题似乎可以简化一点。NET 应用程式。迈克尔 · 马多克斯的回答中 John Robbins 的博客连接的这一段突然出现在我眼前:
一个.NET PDB 只包含两个 信息、源文件名和 它们的行和局部变量 所有其他信息都是 已经存在于.NET 元数据中,因此 没有必要重复相同的 在 PDB 文件中的信息。
对我来说,这重申了其他人一直在谈论的反射器,其含义是,真正的问题是访问程序集。一旦确定了这一点,关于 PDB 的唯一决定就是您是否关心公开文件名、行号和本地变量名(假设您从一开始就没有向最终用户显示堆栈跟踪)。还是我把这个问题过于简单化了?