无法使用前导../退出顶级目录

时间:2010-02-14 18:43:42

标签: asp.net .net security url configuration

我有一个asp.net网站,我们有管理区域,只有admin的登录页面,所有网站都是允许的 - 我需要询问如何为它定义正确的安全配置,因为我收到此错误< / p>

Cannot use a leading .. to exit above the top directory. 
Description: 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. 

Exception Details: System.Web.HttpException: Cannot use a leading .. to exit above the top directory.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[HttpException (0x80004005): Cannot use a leading .. to exit above the top directory.]
   System.Web.Util.UrlPath.ReduceVirtualPath(String path) +8862087
   System.Web.Util.UrlPath.Reduce(String path) +52
   System.Web.Util.UrlPath.Combine(String appPath, String basepath, String relative) +214
   System.Web.UI.Control.ResolveClientUrl(String relativeUrl) +180
   System.Web.UI.WebControls.Image.AddAttributesToRender(HtmlTextWriter writer) +68
   System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter writer) +20
   System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +20
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +163
   System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +32
   System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output) +51
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +40
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266

我的配置文件:

 <authentication mode="Forms">
  <forms name=".ASPXFORMSAUTH" protection="All" loginUrl="Admin/LoginPage.aspx" path="/" enableCrossAppRedirects="true">
  </forms>
</authentication>
<authorization>
  <deny users="*" />
</authorization>

    

                         

9 个答案:

答案 0 :(得分:56)

这意味着您的网页指的是位于文件夹一级的文件夹,但您的网页已经位于网站的根文件夹中,因此相对路径无效。根据您的异常消息判断,图像控件看起来像是导致问题。

你必须有类似的东西:

<asp:Image ImageUrl="..\foo.jpg" />

但是由于页面本身位于网站的根文件夹中,因此无法引用一级的内容,这是领先的..\正在做的事情。

答案 1 :(得分:15)

您可以使用 ~/img/myImage.png 代替 ../img/myImage.png 来避免ASP.NET页面中出现此错误。

答案 2 :(得分:9)

您在某个地方拥有样式="../"的图片或图标链接,如果“../”有效,则会超出网站顶部,如下所示:

图像:

http://example.com/Images/test.jpg

http://example.com/Pages/test.aspx

在该页面上有效:../Images/test.jpg
会抛出错误:../../Images/test.jpg

答案 3 :(得分:2)

这意味着其中一条路径有一个&#34; ..&#34;在它的开头会导致退出网站的根文件夹层次结构。你需要google&#34; asp.net相对路径&#34;或类似的东西来帮助解决你的问题。

BTW,您看到的异常页面中包含了问题所在的提示。它实际上会告诉你它发现了什么文件。

要阻止此异常的未来发生,请在整个解决方案中搜索此字符串:&#34; ../"。如果您在网站的根路径中找到任何文件,请解决它们。

答案 4 :(得分:2)

在我的案例中,结果是在母版页中注释掉了HTML!

谁知道注释掉这样的HTML实际上是由ASP.NET解释的!

<!--
<link rel="icon" href="../../favicon.ico">
-->

答案 5 :(得分:0)

我将我的项目从#34;标准&#34;托管到Azure并在我尝试使用url-rewrite打开页面时收到相同的错误。即规则是:

<add key="/iPod-eBook-Creator.html" value="/Product/ProductDetail?PRODUCT_UID=IPOD_EBOOK_CREATOR" />

尝试打开my_site / iPod-eBook-Creator.html并收到此错误(页面my_site / Product / ProductDetail?PRODUCT_UID = IPOD_EBOOK_CREATOR可以毫无问题地打开)。

我检查了完整的网站 - 从未使用过...到#34;升级&#34;

答案 6 :(得分:0)

我以一种非常奇怪的方式在我的系统上出现问题。在我的系统中,客户创建的产品位于产品类别的目录结构中。因此,ProductA可能位于文件夹CategoryOuter内的CategoryInner文件夹中。我刚刚添加了一个功能,其中我的URL将在URL上显示嵌套的类别:

http://www.somedomain.com/product/CategoryOuter/CategoryInner/ProductA.aspx

显然,URL上的嵌套仅用于搜索引擎优化目的(并向用户显示他们的产品所属的类别。但是当我在某些曾经工作的网址上使用ResolveClientUrl时,它必须被这个错误消息是在调试器中弹出的,在某些行上从来没有出现问题因此我花了很长时间才弄明白发生了什么。我通过并删除了所有我的ResolveClientUrl调用。任何不以〜开头并使其余路径成为绝对路径的东西。

答案 7 :(得分:0)

我遇到了同样的问题...并且做到了。

我之前的代码:

<link rel="stylesheet" href="../css/style.default.css" type="text/css" />

将代码更改为以下内容后问题解决了:

<link rel="stylesheet" href="css/style.default.css" type="text/css" />

所以我认为不允许使用"href=../",因为当我在"../"中使用"src=../"时没有问题

预先感谢

答案 8 :(得分:0)

我知道这些答案就足够了,但我将显示引发错误的位置。

如果您具有以下结构:

  • ./Src/Master.cs-(主表单页面)
  • ./Invoice/SubFolder/InvoiceEdit.aspx-(子表单页面)

如果您进入子表单页面,则在使用与在母版页面Page.ResolveClientUrl("~/Style/img/logo_small.png")中使用的类似内容时会出现错误。

现在ResolveClientUrl位于母版页中,正在尝试为根文件夹提供服务。但是由于您位于子文件夹中,因此该函数返回类似../../Style/img/logo_small.png的内容。这是错误的方法。

因为当您达到两个级别时,您的位置不正确;您只需要上一个 级别,所以类似../