gpt4 book ai didi

c# - 如何捕获 "A potentially dangerous Request.Path value was detected from the client (:)"以避免 Web 角色崩溃?

转载 作者:行者123 更新时间:2023-11-30 15:56:11 26 4
gpt4 key购买 nike

在 Azure 云服务上运行的我的 MVC 5 Web 应用程序因未处理的异常“从客户端检测到潜在危险的 Request.Path 值 (:)”而崩溃。

导致此崩溃的原因是某些第三方(可能是恶意的)使用以下网址攻击我的端点: http://myExampleHost.com/m:443/templates

url中的冒号无法通过路径验证。

一些答案​​ ( A potentially dangerous Request.Path value was detected from the client (*) ) 建议更改验证规则。然而,出于安全考虑,我们可能不想在这一点上妥协。

理想的行为是:我们捕获异常,记录它并返回一些错误消息而不会崩溃。我们应该怎样做呢?

一个更普遍的问题是:如何在请求到达 MVC 中的 Controller 之前捕获异常?

最佳答案

The ideal behavior for it that: we catch the exception, log it and return some error messages without crashing. How should we do that?

根据我的理解,您可以利用 Application_Error 事件来捕获 ASP.NET 中未处理的异常。这是我的测试,你可以引用一下:

protected void Application_Error()
{
HttpContext httpContext = HttpContext.Current;
var exception=Server.GetLastError();
var httpException = exception as HttpException ?? new HttpException(500, "Internal Server Error", exception);
var jsonResponse = new
{
Message = exception.Message,
StatusCode = httpException.GetHttpCode(),
StackTrace=httpException.StackTrace
};
httpContext.Response.ContentType = "application/json";
httpContext.Response.ContentEncoding = Encoding.UTF8;
httpContext.Response.Write(JsonConvert.SerializeObject(jsonResponse));
httpContext.Response.End();
}

enter image description here

注意:您还可以重定向到特定的错误页面。

此外,您可以利用 web.config 中的 customErrors 并捕获特定 HTTP 错误代码的错误页面。另外,您可以检查 Application_EndRequest 事件下的 HTTP 状态代码并编写您的自定义响应,详细信息您可以引用类似的 issue 。此外,我建议您关注Demystifying ASP.NET MVC 5 Error Pages and Error Logging有关错误处理的更多详细信息。

关于c# - 如何捕获 "A potentially dangerous Request.Path value was detected from the client (:)"以避免 Web 角色崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com