.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
相关产品推荐
相关产品推荐

