【问题标题】:ASP.Net Website different error page for external and internal usersASP.Net 网站针对外部和内部用户的不同错误页面
【发布时间】:2011-06-22 15:53:51
【问题描述】:

场景:我们有一个在内部和外部都可以查看的网站。发生错误时,会向用户显示详细的错误页面(堆栈跟踪等)。

问题:外部客户不需要太多关于错误的信息。我们希望让外部客户看到一条消息。前任。请联系管理员。此外,如果可能的话,我们希望将此消息记录在我们的 SQL 数据库中。

注意:我假设我制作了一个自定义错误页面,例如 - Implementing a Custom Error page on an ASP.Net website,但我如何确定用户是内部用户还是外部用户?这也是解决问题的最佳方法吗?此外,如果有人对将这些错误存储在数据库中的最佳方式提出建议,我们也将不胜感激。

提前致谢。

【问题讨论】:

    标签: c# asp.net sql vb.net


    【解决方案1】:

    您可以尝试在 web.config 中将您的 mode 设置为 RemoteOnly

    <customErrors mode="RemoteOnly">
    

    这样本地用户会看到错误,而外部用户会看到您设置的其他错误页面。

    这里有一篇关于这类事情的文章http://aspnetresources.com/articles/CustomErrorPages

    【讨论】:

    • 最好的方法。在你的代码中做任何事情都是一种黑客行为。
    • 如果我错了,请纠正我,但 RemoteOnly 不只是意味着“人们不是从这台机器访问”吗?如果是这样,那么这并不能回答问题。
    • customErrors 是否仅区分从服务器本身浏览与从服务器外部浏览? OP 的场景是从公司内部(不一定是服务器本身)与客户外部从外部浏览。至少我是这么读的。
    【解决方案2】:

    我这样做的方法是为外部和内部用户设置不同的入口点。我会通过主机名来做到这一点。通过更改主机名,我可以为每种类型的用户创建自定义错误体验。

    【讨论】:

    • 很有趣,但可以强制执行吗?
    • @The Evil Greebo 酷名顺便说一句。是的,这是可执行的,但需要在 DNS 和防火墙上进行配置。
    • 我怀疑需要对防火墙进行一些操作 - 因此在这种情况下需要一些服务器管理员协助。
    【解决方案3】:

    如果“内部”表示已登录,“外部”表示匿名,则可以使用相同的自定义错误页面,但使用 Request.IsAuthenticated 检查用户的登录状态

    然后您可以简单地根据用户的状态显示消息。

    为了存储错误,您可以使用 log4net 和/或 ELMAH。 ELMHA 专门用于捕获未处理的异常。 Log4net 主要用于从您的代码中进行日志记录,即从 try/catch 语句中。

    最好同时使用两者。

    【讨论】:

      【解决方案4】:

      那篇文章正处于您需要做的事情的正确轨道上。另请参阅:

      确定用户是内部用户还是外部用户将由网络服务器处理。

      【讨论】:

      • 我不认为您在与 OP 相同的上下文中使用“内部”。
      【解决方案5】:

      RemoteOnly 的自定义错误可能对您没有帮助,因为 RemoteOnly 仅指不从同一个物理框访问页面的用户。 LAN 上的用户将被视为远程用户,就像来自 WAN 的用户一样。

      如果我必须解决您的问题,我会从 Application_Error 开始并检查 Request.UserHostAddress 和 Request.UserHostName 但即使这些也不会完全可靠,因为在我的公司 Intranet 上,我的地址 10.4.42.219 可能很好匹配您公司的内部地址,并且 UserHostName 应该是一个人类可读的名称,但它并不总是 - 例如,看看它在调试模式下运行,并且 UserHostAddress 和 UserHostName 都将是“127.0 .0.1" 当您期望后者是“localhost”时。

      看到这里的问题是,当他们访问您的网络服务器时,他们已经在防火墙内,并且服务器是一个侦听器 - 所以传入连接声明的 IP 并不重要什么来自(欺骗是一个非常现实的问题),您的网络服务器不会发起响应,它会沿着客户端打开的管道发送响应。

      现在,如果您的防火墙可以配置为利用欺骗并强制进入的 IP 为特定值,那将是可靠识别外部连接的一种可能方法,并通过消除过程识别内部连接,但我可以'不能肯定地谈论这种方法的可行性。

      编辑添加:我怀疑您最初的问题本身可能存在缺陷。我问自己的问题是,你的内部谁真正关心错误信息?您的公司秘书是否想要查看堆栈跟踪信息?应该不会吧。

      我怀疑您在这里真正需要的是主动身份验证和基于角色的安全性,这样只有特定标识的用户(可能是“错误调查员”角色的成员)才能看到那些详细的异常,并且其他所有人,包括内部用户,都可以获得漂亮的自定义页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多