Asp.Net Web API 阻止 404 页面上的任意文本

Posted

技术标签:

【中文标题】Asp.Net Web API 阻止 404 页面上的任意文本【英文标题】:Asp.Net Web API Block Arbitrary text on 404 page 【发布时间】:2021-05-12 21:13:54 【问题描述】:

在我的应用程序(Asp.Net web api)中,如果攻击者在 api url 之后插入任意文本,则该文本将显示在 404 错误页面中。这可以被攻击者用来欺骗用户点击自定义链接或进行网络钓鱼攻击。

我想阻止任意文本出现在这样的错误页面上。这里需要注意的是,我们还没有在应用程序中实现基于 GUID 的错误消息。

【问题讨论】:

【参考方案1】:

为了设置自定义 404 错误页面,将以下内容添加到 内的 web.config:

<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="~/404.html"/>
</customErrors>

我已设置 mode="On",以便我们可以在本地查看自定义错误页面。通常你只想在生产中显示这些,所以设置 mode="RemoteOnly"

然后在 IIS 中添加自定义错误页面(请注意,这只适用于 IIS 7+)。在 web.config 中添加以下内容 :

<httpErrors errorMode="Custom">
  <remove statusCode="404"/>
  <error statusCode="404" path="/404.html" responseMode="File"/>
</httpErrors>

如果没有帮助,因为我不知道您的应用程序的架构,您应该寻求路由匹配解决方案:

实现智能 IHttpRouteConstraint 将约束应用于属性路由 将约束应用于集中式路由

这里是实现的细节: https://www.strathweb.com/2014/10/route-matching-overriding-404-asp-net-web-api/

【讨论】:

感谢您的回复。我需要的是可以处理在我的 web api 的错误页面上显示的自定义消息:localhost:12345/web-api/api/MY CUSTOM MESSAGE 现在攻击者可以将自定义消息添加到上述 url 的任何部分(当然域除外),这条消息将与请求的 url 一起反映在 404 错误页面中。我想阻止该消息反映在整个应用程序的自定义 url 中,无论用户输入什么以及他攻击 url 的哪一部分。希望我能够澄清。 @SushantRawat 我认为唯一的方法是在 web.config 中添加自定义 404 页面,启用 customErrors 并重定向到 HTML 页面,并且您必须启用 WebApi 以提供静态文件 能否请您指导我到一篇文章寻求帮助?

以上是关于Asp.Net Web API 阻止 404 页面上的任意文本的主要内容,如果未能解决你的问题,请参考以下文章

当用户未经身份验证时,ASP.NET Core 5 Web API 返回 404 代码而不是 401

所有 ASP.NET Web API 控制器都返回 404

ASP.NET MVC 4,Web API - 404 未找到

第二个API上的ASP.Net Web API 404错误

ASP.NET Core Web API HTTP POST 在 Azure 中返回 404

Postman 收到简单的 ASP.NET Core Web API 的 404 错误