You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net 6遇请求路径危险值报错,如何自定义错误页及配置验证?

.NET 6 处理含危险字符请求的解决方案

在.NET 6中,不再通过web.config的validateRequest标签配置请求验证,而是通过代码层面的中间件和选项配置来实现类似需求。针对你遇到的含危险字符的请求路径触发VAPT问题,可按以下步骤处理:

1. 禁用默认的自动请求验证

默认情况下,.NET 6会自动拦截包含潜在危险字符的请求并返回400错误。首先需要禁用这一默认行为,以便自定义处理逻辑:

在Program.cs的服务配置部分,添加如下代码:

services.AddControllersWithViews(options =>
{
    // 禁用自动输入验证,避免默认拦截后无法自定义处理
    options.SuppressInputValidationForRedirects = true;
    options.ModelMetadataDetailsProviders.Add(new SuppressValidationMetadataProvider(typeof(string)));
});

2. 编写自定义请求验证中间件

创建一个中间件类,用于检查请求路径中是否包含危险字符(如<、>、单引号等XSS相关字符),并在检测到危险请求时重定向到自定义错误页:

public class RequestValidationMiddleware
{
    private readonly RequestDelegate _next;
    // 定义需要拦截的危险字符或模式,可根据实际VAPT要求扩展
    private readonly HashSet<string> _dangerousPatterns = new HashSet<string>
    {
        "<svg", "onload=", "<", ">", "'\""
    };

    public RequestValidationMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        var requestPath = context.Request.Path.Value?.ToLowerInvariant() ?? string.Empty;
        
        // 检查请求路径是否包含危险模式
        var isDangerous = _dangerousPatterns.Any(pattern => requestPath.Contains(pattern));
        
        if (isDangerous)
        {
            // 重定向到自定义错误页,替换为你的错误页路径
            context.Response.Redirect("/Error/InvalidRequest");
            return;
        }

        // 无危险则继续处理请求
        await _next(context);
    }
}

// 扩展方法,方便注册中间件
public static class RequestValidationMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestValidation(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestValidationMiddleware>();
    }
}

然后在Program.cs的中间件管道中,在路由注册前添加这个中间件:

var app = builder.Build();

// 其他中间件配置(如静态文件、异常处理等)
app.UseStaticFiles();

// 添加自定义请求验证中间件
app.UseRequestValidation();

app.UseRouting();

// 认证、授权等中间件
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

3. 配置自定义错误页

确保你的项目中有处理错误的控制器和视图,示例如下:

创建ErrorController:

public class ErrorController : Controller
{
    public IActionResult InvalidRequest()
    {
        Response.StatusCode = 400; // 设置正确的状态码
        return View();
    }
}

在Views/Error目录下创建InvalidRequest.cshtml视图,编写自定义错误页面内容。

补充说明

  • 可根据VAPT的具体检测规则,扩展_dangerousPatterns集合,添加更多需要拦截的危险字符或字符串模式。
  • 如果需要更精确的正则匹配,可将哈希集合替换为正则表达式列表,提升检测准确性。
  • 若项目是Web API,可将重定向改为返回自定义JSON错误响应,而非页面重定向。

内容的提问来源于stack exchange,提问作者user1966548

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:39:19