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

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

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

        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嵌套)。


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

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

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

分享给朋友:

相关文章

ASP.NET实现HTTP长轮询(三)——MVC

ASP.NET实现HTTP长轮询(三)——MVC

        本文主要描述如何在ASP.NET MVC中实现长轮询:(1)控制器继承AsyncController:using System.Threading; using ...

在ASP.NET Core下使用Scaffold-DbContext命令自动从数据库生成EF Core模型

在ASP.NET Core下使用Scaffold-DbContext命令自动从数据库生成EF Core模型

        在ASP.NET Core下使用EF Core读取和操作数据库时,若采用DB First开发模式,则需要手动写或者自动生成相关实体类和DBCon...

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等为公众开放的服务外),尽可能改为其它较大的不常用的端口号,这样攻击者需要扫描...

发表评论

访客

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