服务器应用程序的堆栈跟踪是漏洞吗?

信息安全 错误处理
2021-09-05 20:52:41

关于我在programmers.stackexchange.com上的问题

当事情崩溃时让您的应用程序向用户显示完整的堆栈跟踪是否存在安全风险?我们的应用程序通过的一些安全审计表明它是。我不同意。我看不出这如何以任何方式帮助攻击者。

当然,有“尽可能少说”的原则,但这也必须与常识相平衡,我认为让这些信息容易获得比被滥用的风险更大的好处。

有没有这方面的研究?有任何证据表明这是一个安全风险吗?或者这是对上述原则的过度狂热应用?

3个回答

堆栈跟踪是一种信息泄漏,它揭示了有关您的实现的信息。虽然不是一个严重的漏洞,但它确实允许攻击者获取有关您系统的某些信息。它还可能允许他们使用基于调试的方法来利用您网站中的缺陷。

有人可能会争辩说,堆栈跟踪本身就是一个漏洞,因为没有人应该能够以这种方式使您的网站崩溃。

忽略安全隐患,您的客户看到堆栈跟踪并不能完全激发信心。他们会假设该站点已损坏(确实如此)并担心他们的交易是否有效,或者甚至认为该站点已被黑客入侵。

延伸阅读:在错误页面中显示异常消息是否存在漏洞?

堆栈跟踪本身通常不是漏洞。但是,它可能会泄露一些关于软件设计的信息,这可能对攻击者有帮助(例如,泄露数据库版本、表名、代码文件名等)。因此,通常显示堆栈跟踪不是一个好主意。

处理这个问题的标准方法是:关闭生产服务器上的堆栈跟踪。您可以在不暴露于外部世界的调试版本上打开堆栈跟踪,以帮助您调试崩溃,但是当您将其移至生产环境时,请关闭堆栈跟踪。

web2py web 框架有一个更优雅的方式来处理这个问题web2py 从不向访问者显示堆栈跟踪。相反,如果发生未捕获的异常,web2py 会构造一个新的“票证”,向访问者显示票证编号,并将与该票证相关联的错误详细信息(例如,堆栈跟踪等)保存在内部数据库中。普通访客看不到工单的详细信息,但管理员可以。管理员可以查看所有工单的列表。此外,给定票号,管理员可以查找该票的详细信息并查看例如堆栈跟踪。从安全的角度来看,这是一个很好的方法。

(顺便说一句,web2py 是一个优雅的框架,它在默认情况下启用安全性并为开发人员提供了很多便利。web2py 试图消除安全隐患并在默认情况下确保您的服务安全,在它可以做到的范围内。如果你重新构建需要安全的 Web 服务,看看 web2py!)

是的。

最好的是我遇到的一个泄露了网络服务器上所有数据库凭据的信息。是的,您可以远程访问数据库并在其上运行查询。这可能意味着有人可能会做一些讨厌的事情,比如DROP "databasename",或者必须更好地抽取数据库中的所有数据。

我通知所有者的另一个是一个记录会话,其中堆栈跟踪显示了管理登录名和未加密的密码。

大多数堆栈跟踪只是信息泄漏,可以帮助某人进行他们的邪恶活动,不像前两个示例那么明显。