我有一个包含多个路由和控制器的Web API2项目。我开始测试一些相当标准的安全功能,包括SQL注入。我试图将请求参数"*“传递给具有数据库操作的路由。我立即得到了一个HTML形式的详细响应,这对我用来测试的C#控制台应用程序没有什么用处。
然而,HTML确实有我想要的唯一真正的信息,那就是异常消息和状态代码。以下是HTML的一部分:
<body bgcolor="white">
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>A potentially dangerous Request.Path value was detected from the client (*).</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
...这个安全异常是在它进入我的一个自定义控制器之前抛出的,我在这个控制器中设置了错误处理逻辑。有没有一种方法可以覆盖返回的超文本标记语言,并返回一个标准的HttpResponse或HttpResponseMessage,而无需完全替换标准安全措施,这些安全措施甚至在到达我的路由之前就已经在这里正常运行了?这是一个不明智的想法吗?这是可配置的设置吗?
发布于 2020-08-21 04:33:41
我将发布我在this post的帮助下得到的答案。请注意此答案下面的注释,以了解为什么我的答案略有不同。在你们有机会回答/指出我的错误之前,我不会将此答案标记为“已接受”的答案。我确实觉得我在这里尝试做的事情与问题和答案有足够的不同,它值得自己的帖子。我们将看看mob和暴徒是否同意。
实际上,我覆盖了Global.asax.cs类文件中的默认错误事件处理程序,并且只将HttpException.Message写入Response
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
if (exception is HttpException)
{
Server.ClearError();
Response.Clear();
Response.StatusCode = (int)HttpStatusCode.BadRequest;
Response.Write(exception.Message);
HttpContext.Current.ApplicationInstance.CompleteRequest();
return;
}
}我甚至可以去掉if语句,以这种方式返回每个异常。老实说,我还没有遇到任何其他问题。
https://stackoverflow.com/questions/63512607
复制相似问题