当前位置:首页 > 技术积累 > 正文内容

ASP.NET网站自定义错误处理及其它安全相关

竹林之风2年前 (2021-05-01)技术积累1345

        ASP.NET网站在运行过程中总是有可能报错,例如404等HTTP错误、500等程序异常。在IIS托管并报错的情况下,网站的默认行为依次是:

(1).NET运行时接收并处理的部分显示.NET报错页;

(2)Global.asax、Filter、DelegatingHandler等自定义处理;

(3)未转发到.NET运行时的部分根据web.config中的CustomErrors设置跳转到相应页面;

(4)以上都未接收并处理的部分跳转至IIS的默认报错页。

        采用默认错误信息展示的方式,会在标头或页面中暴露.NET版本号、ASP.NET版本号、MVC版本号、IIS版本号等相关服务器信息,为扫描和攻击提供了参考信息;另一方面系统默认错误信息对用户也不友好。基于这些原因,我们对ASP.NET网站的错误信息进行自定义,对用户友好,也能降低漏洞被发现或系统被攻破的几率。

(1)程序异常时返回信息处理:

①不返回具体异常信息,统一显示如“系统发生异常并已记录,请稍候再试!”,避免提供攻击依据;

②登录错误时不返回“账号不正确”、“密码不正确”等具体提示,统一返回模糊提示如“账号或密码错误”;

③禁止SQL拼接;

④其它。

(2)在MVC中隐藏MVC版本号标头:

using System;
using System.Web;
using System.Web.Mvc;

namespace ***
{
    public class WebApiApplication : HttpApplication
    {
        //……
        protected void Application_Start()
        {
            //……
            MvcHandler.DisableMvcResponseHeader = true;//禁止MVC响应标头
            //……            
        }        
        //……
    }
}

(3)在MVC中的ExceptionFilterAttribute中自定义处理错误信息:

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Web;
using System.Web.Http.Filters;

namespace ***.Filters
{
    public class LogExAttribute : ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            base.OnException(actionExecutedContext);
            //自定义处理错误信息
        }
    }
}

(4)在MVC中的DelegatingHandler中自定义处理错误信息:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Http;
using System.Threading.Tasks;
using System.Threading;
using System.Net;
using System.Net.Http.Formatting;
using System.Diagnostics;
using System.Text;

namespace ***.Filters
{
    public class CommonDelegatingHandler : DelegatingHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {            
            //……
            HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
            //自定义处理错误信息
            //……

            return response;
        }
    }
}

(5)在MVC的Global.asax.cs中自定义处理错误信息(ASP.NET WebForm同理):

namespace ***
{
    public class WebApiApplication : HttpApplication
    {
        //……
        protected void Application_Error()
        {
            //……
            //自定义处理错误信息
            //……            
        }        
        //……
    }
}

(6)在web.config设置自定义错误页面,并禁用.NET/ASP.NET版本号标头:

<customErrors mode="RemoteOnly" defaultRedirect="~/ServerError.html">
</customErrors>
<httpRuntime enableVersionHeader="false" />

(7)设置IIS禁用除GET、POST等以外的非常用谓词、去掉服务器参数相关响应标头、增加X-Frame-Options:SAMEORIGIN标头(防止被异源iframe嵌套)。


扫描二维码推送至手机访问。

版权声明:本文由久爱编程网发布,如需转载请注明出处。

本文链接:http://9icode.com/index.php/post/353.html

分享给朋友:

相关文章

在线支付子模块的设计与实现

在线支付子模块的设计与实现

        一个在线交易系统需要各种支付方式方便客户付款,这些支付方式按场景可分为在线支付和线下现付。线下现付常见的有货到付款、邮局汇款、银行电汇等非实时方...

ASP.NET实现HTTP长轮询(一)——WebForm

ASP.NET实现HTTP长轮询(一)——WebForm

        本文主要描述如何在ASP.NET WebForm中实现长轮询:(1)在ASP.NET WebForm的aspx文件中设置如下指令即可实现异步的ASP.NET WebForm:<%...

通用基础表逻辑设计(三)——功能权限

通用基础表逻辑设计(三)——功能权限

概述        在一个应用系统中有多个用户,用户通常分为多种角色,每种角色的用户能够访问的页面、能够查看的数据或者能够执行的操作等各有不同,因此需要设计与实...

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常时,其中一个原因是:在已经重定向后又重定向。在ASP.NET中实现重定向有以下几...

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常,是因为设置Response的StatusCode之前,程序已设置响应标头。可从以...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。