2010-07-06 32 views
0

我一直在阅读基于ASP.NET的网站应该在web.config中启用自定义错误,因为异常会显示堆栈跟踪。ASP.NET自定义错误与编译debug =“false”和安全

我可能有错误的内存(目前无法访问正在开发的ASP.NET网站),但我认为只要在web.config文件中编译debug =“false”,那么堆栈跟踪将不会显示。

我的理解是否正确,关于调试标志和显示堆栈跟踪?如果是这样,那么即使未启用自定义错误,那么对于异常显示给远程用户的唯一消息也不会是非描述性消息:

“页面无法显示,因为内部服务器错误发生。”

如果是这样,那么从安全角度来看,它不会是好的,不会显示异常的自定义错误页面?

+0

你是不是指“客户”错误的“自定义”错误? – 2010-07-06 23:46:16

+0

是的,我纠正了这个错字。希望我修复所有实例。 – harrije 2010-07-06 23:51:17

+0

我修复了你的标题。 – 2010-07-06 23:52:10

回答

1

不,即使调试标志关闭,堆栈跟踪仍会显示,但堆栈中每个调用都没有行号。

非描述性消息是浏览器通常显示的内容,而不是来自服务器的实际错误消息,除非更改配置。任何想通过引发错误信息来公开信息的人都知道如何做到这一点。

显示堆栈跟踪本身并不是一个安全风险,但它确实暴露了一些信息,可能会更容易破解该站点。例如,黑客可能会弄清楚为了清洁输入并找到解决办法所做的工作。

+0

然后使用一个全局自定义错误页面,在最佳实践方面会有所改进,而且没有自定义错误页面,对吗? – harrije 2010-07-06 23:35:59

+0

@harrije:是的,它可以防止错误信息泄露,并为碰巧遇到错误信息的用户提供更好的体验。 – Guffa 2010-07-07 00:40:55

0

自定义错误消息几乎总是优先于抛出的默认错误。它优雅地将用户发送到他们可以继续浏览您的网站的位置,而无需返回并重试。

在您的web中关闭DEBUGGING .Config非常重要,不仅仅是不显示行号和堆栈跟踪......它还告诉编译器构建在可显着优化性能的发布模式中。只要您的应用程序投入生产,应该禁用所有调试。