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

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

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

        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://www.9icode.com/index.php/post/353.html

分享给朋友:

相关文章

Android开发从新手开始(一)——概述

Android开发从新手开始(一)——概述

前言        做为一个程序员,不应该将自己限定在自己熟悉的平台和语言上,而也应该多去了解一下其它平台和语言。这样可以吸取各个平台和语言的思想,提升自己解决...

云平台多租户系统的设计方案

云平台多租户系统的设计方案

        多租户(Multi Tenancy)是指在一个云平台上,多个不同的客户共用相同的平台和架构但又相互独立并对各自的用户提供服务。多租户相同有4个特...

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

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

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

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

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

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

从被扫描记录看网站安全应该注意的一些细节

从被扫描记录看网站安全应该注意的一些细节

1、尽可能地隐藏服务器真实IP,减少攻击目标。例如使用负载均衡、网关等作为门户,由负载均衡或网关转发到后端服务器。2、服务器必须开放的服务(除HTTP、HTTPS等为公众开放的服务外),尽可能改为其它较大的不常用的端口号,这样攻击者需要扫描...

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

        ASP.NET Core网站报“An assembly specified in the application dependencies ma...

发表评论

访客

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