【问题标题】:../../../test is giving 404 file or folder not found error../../../test 给出 404 file or folder not found 错误
【发布时间】:2017-10-17 15:49:29
【问题描述】:

我有一个 ASP.NET MVC 应用程序托管在 URL http://10.26.14.99/projectA 即 environment1 的 Web 服务器中,并且相同的应用程序托管在另一个具有 URL https://projectA.test.com 即 environment2 的 Web 服务器中。

现在,对于 environment1,当我输入 http://10.26.14.99/projectA/../../../../test 时,它显示 URL 为 http://10.26.14.99/test,并出现 404“找不到文件或文件夹”错误,但同时对于 environment2,当我输入 https://projectA.test.com/../../../../test 时,它会显示网址为https://projectA.test.com/test,它还将我带到预期的登录页面。

谁能告诉我在 environment1 中需要做什么才能获得与 environment2 相同的预期结果?

【问题讨论】:

  • 请澄清您所说的“当我输入 [URL] 时”的意思。在浏览器中?在视图中?你在哪里输入?

标签: .net asp.net-mvc iis


【解决方案1】:

在 ASP .NET MVC 中,您可以使用 ~ 波浪号提供路径,表示应用程序路径。

因此,例如,您的剃须刀中可能有 cshtml 文件。

<a href="~/test">test link</a>

您的问题是当您在本地进行测试时,您使用的是虚拟应用程序。所以对许多.. 来说,这会让你脱离应用程序的路径。

请参阅 here,了解 ~ 在 MVC 应用程序中的工作原理。


或者,如果您对您的 URL 路径感到满意,那么您需要更改您的网站托管方式,以不从虚拟应用程序提供服务。但是,您将只能为每个 IP 地址托管一个应用程序。

【讨论】:

  • 这是一种针对目录遍历攻击的应用安全检查。我将“~”或@Html.Content() 用于任何相对路径,但如果用户将URL 键入为“10.26.14.99/projectA/../../../../test”;然后我希望它重定向到自定义错误页面或应该将用户重定向到登录页面。在当前情况下,我收到 404 错误
  • 是的,所以在您离开 projectA 站点的情况下,您需要在默认的 IIS 站点中执行某些操作。
  • 这就是我想要找出的是否有 IIS 级别的一些设置或标志可以解决这个问题,但我没有得到任何东西。如果您有任何事情,请告诉我。
  • 您可以在 web.config 中将 404 错误处理设置为重定向,但您不知道它来自哪个应用程序。可能最好的办法是在默认站点中放置一个 index.html 来说明您想要显示的任何消息
【解决方案2】:

不要在 ASP.NET MVC 中使用相对 url。它们会中断,因为由于默认 URL 映射,可以从不同的 URL 访问页面。例如,http://example.com/http://example.com/Homehttp://example.com/Home/Index 都可以指向同一个页面,并且由于图像和其他资产是从 url 访问的,因此您会以某种方式需要能够从所有人访问的资产三。

最好使用站点相关 url,使用 Ashley 提到的波浪号 (~)。在较新的 MVC 版本(使用 Razor 版本 3 或更高版本)中,这些 url 直接在 href 和 src 属性中得到支持,但在某些情况下,您可能必须使用 @Html.Content() 帮助器。

唯一的例外是 CSS 中的 URL。可以在 CSS 中使用相对 URL,因为 CSS URL 是相对于 CSS 文件位置的,所以可以正常工作。

【讨论】:

  • 这是一种针对目录遍历攻击的应用安全检查。我将“~”或@Html.Content() 用于任何相对路径,但如果用户将URL 键入为“10.26.14.99/projectA/../../../../test”,那么我希望它重定向到自定义错误页面或者应该将用户重定向到登录页。在当前情况下,我收到 404 错误。
  • 404 是正确的响应。 Web 服务器应该表现得像这样的 url 不存在。
  • 是的,根据服务器响应 404 是正确的。但是,我想处理这种情况以显示一些用户友好的消息。我该怎么做?
猜你喜欢
  • 2021-12-18
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 2016-08-21
  • 1970-01-01
  • 2016-08-30
  • 2012-03-09
相关资源
最近更新 更多