2017-10-17 114 views
0

我有一个ASP.NET MVC应用程序托管在网络服务器与网址http://10.26.14.99/projectA即环境1和相同的应用程序托管在另一个Web服务器与URL https://projectA.test.com ie environment2。现在../../../test给404文件或文件夹没有找到错误

,对环境1当我输入http://10.26.14.99/projectA/../../../../test它显示“文件夹中未找到文件或”错误的URL作为http://10.26.14.99/test与404,但在同一时间,环境2时,如果我进入https://projectA.test.com/../../../../test那么它显示的URL为https://projectA.test.com/test和它也带我到预期的登录页面。

任何人都可以请告诉我在environment1中需要做什么以获得与environment2相同的预期结果?

+0

请澄清当你说“当我输入[URL]”时你的意思。在浏览器中?在一个视图?你在哪里进入它? – NightOwl888

回答

0

在ASP .NET MVC中,您可以给路径使用~代字号,以表示应用程序路由。

所以,你可能在你的剃须刀cshtml文件中。

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

您的问题是当您在本地测试您使用的是虚拟应用程序时。因此,许多..将您带到您的应用程序之外。

请参阅here了解~如何在MVC应用程序中工作。


另外,如果你很高兴与您的网址路径,那么你需要改变你的网站托管到不从虚拟应用服务的方式。但是,您只能为每个IP地址托管一个应用程序。

+0

这是一种针对目录遍历攻击的应用程序安全检查。我为任何相对路径使用“〜”或@ Html.Content(),但万一用户输入URL为“10.26.14.99/projectA/../../../../test”;那么我希望它重定向到自定义错误页面或将用户重定向到登录页面。在目前的情况下,我得到了404错误 –

+0

是的,所以在你离开projectA站点的情况下,你需要在默认的IIS站点上做一些事情。 –

+0

这就是我试图找出是否有一些设置或标志在IIS级别,将解决这个问题,但我没有得到任何东西。如果您有任何问题,请告诉我。 –

0

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

最好使用网站相对网址,使用阿什利提到的波浪号(〜)。在更新版本的MVC中(使用Razor版本3或更高版本),这些URL直接支持href和src属性,但在某些情况下,您可能必须使用@Html.Content()助手。

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

+0

这是一种应用程序安全检查的目录遍历攻击。我为任何相对路径使用“〜”或@ Html.Content(),但如果用户输入URL为“http://10.26.14.99/projectA/../../../../test “那么我希望它重定向到自定义错误页面或者应该将用户重定向到登录页面。在目前的情况下,我得到了404错误。 –

+0

404是正确的回应。 Web服务器应该像这样的URL不存在。 –

+0

是的,根据服务器响应404是正确的。但是,我想处理这种情况来显示一些用户友好的消息。我怎样才能做到这一点? –

相关问题