我有一个包含多个路由和控制器的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
复制相似问题