.net“从客户端中检测到有潜在危险的 Request.QueryString 值”这种报错如何避免混入500错误中?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
这个问题是因为.NET加强了请求验证,默认会拦截包含<、>等特殊字符的查询字符串,以防止XSS攻击。 这个提示出现,就说明请求验证已经拦截成功了。请求在进入你的页面代码之前就被 ASP.NET 终止了,页面逻辑、数据库操作都不会执行。所以从安全角度,目的已经达到了。 你现在的问题是:这个异常默认会被当成 500 错误,于是你的 可以用 参考代码,放在 void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); // 查找是否是请求验证异常(可能被包装在 InnerException 里) Exception valEx = ex; while (valEx != null && !(valEx is HttpRequestValidationException)) { valEx = valEx.InnerException; } if (valEx is HttpRequestValidationException) { // 关键:清除错误,阻止 customErrors 跳转到 error_500.aspx Server.ClearError(); Response.Clear(); Response.StatusCode = 400; // Bad Request,表示客户端请求非法 Response.TrySkipIisCustomErrors = true; // 防止 IIS 再套一层错误页 Response.ContentType = "text/plain; charset=utf-8"; Response.Write("请求包含非法字符,已被拒绝。"); Response.End(); return; } // 其他异常,继续走你原来的自定义错误页逻辑 // 如果 customErrors 已经配置,这里不处理也行; // 如果要手动跳: // Response.Redirect("~/error_500.aspx"); } 这样处理之后:
几点提醒:
该文章在 2026/10/9 11:46:11 编辑过 |
关键字查询
相关文章
正在查询... |