不能使用前导 ../ 退出***目录

Posted

技术标签:

【中文标题】不能使用前导 ../ 退出***目录【英文标题】:Cannot use a leading ../ to exit above the top directory 【发布时间】:2011-01-16 18:19:50 【问题描述】:

我有一个 asp.net 网站,我们有管理区域,登录页面仅供管理员使用,所有网站都允许使用 - 我需要询问如何为它定义正确的安全配置,因为我收到此错误

不能使用前导 .. 退出***目录。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Web.HttpException:无法使用前导 .. 退出***目录。

源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:


[HttpException (0x80004005): 不能使用前导 .. 退出***目录。]
   System.Web.Util.UrlPath.ReduceVirtualPath(字符串路径) +8862087
   System.Web.Util.UrlPath.Reduce(字符串路径)+52
   System.Web.Util.UrlPath.Combine(String appPath, String basepath, String relative) +214
   System.Web.UI.Control.ResolveClientUrl(字符串 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 编写器,ControlAdapter 适配器)+27
   System.Web.UI.Control.RenderControl(HtmlTextWriter 编写器,ControlAdapter 适配器)+99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer)+25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter 作家,ICollection 孩子)+134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)+19
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter 作家)+163
   System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)+32
   System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter 输出)+51
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter 编写器,ControlAdapter 适配器)+27
   System.Web.UI.Control.RenderControl(HtmlTextWriter 编写器,ControlAdapter 适配器)+99
   System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +40
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter 作家,ICollection 孩子)+134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)+19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter 编写器,ControlAdapter 适配器)+27
   System.Web.UI.Control.RenderControl(HtmlTextWriter 编写器,ControlAdapter 适配器)+99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer)+25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter 作家,ICollection 孩子)+134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)+19
   System.Web.UI.Page.Render(HtmlTextWriter 编写器)+29
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter 编写器,ControlAdapter 适配器)+27
   System.Web.UI.Control.RenderControl(HtmlTextWriter 编写器,ControlAdapter 适配器)+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>

【问题讨论】:

造成这种情况的请求是什么? 【参考方案1】:

请从母版页中删除所有 ../,例如

<link rel="stylesheet" id="stylesheet" href="../Includes/Styles/responsive.css" />

而不是使用

<link rel="stylesheet" id="stylesheet" href="Includes/Styles/responsive.css" />

【讨论】:

【参考方案2】:

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

我之前的代码:

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

我把代码改成这样后问题就解决了:

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

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

【讨论】:

【参考方案3】:

我知道这些答案已经足够了,但我会显示引发错误的地方。

如果你有如下结构:

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

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

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

因为当你上升两个级别时,你就不是在正确的地方;你只需要提升一个级别,比如../

【讨论】:

【参考方案4】:

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

图片:

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

页面

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

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

【讨论】:

【参考方案5】:

在我的例子中,原来是在母版页中注释掉了 HTML!

谁知道像这样被注释掉的 HTML 居然被 ASP.NET 解释了!

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

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

显然,URL 上的嵌套只是为了 SEO 目的(并向用户展示他们的产品所在的类别。但是当我在一些曾经有效的 URL 上使用 ResolveClientUrl 时,它一定是被额外的假路径。错误消息在调试器中弹出了一些从来都不是问题的行,所以我花了很长时间才弄清楚发生了什么。我通过并删除了我所有的 ResolveClientUrl 调用,这些调用作用于任何没有以 ~ 开头,并将其余路径设为绝对路径。

【讨论】:

【参考方案8】:

我遇到了这样的问题,虽然很难找到答案,但通过在错误页面上搜索错误消息中的“..”来解决。我正在使用 Visual Studio Express,解决方案是将 "../../Images/" 更改为 "~/Images/" 。希望这会对某人有所帮助。

【讨论】:

【参考方案9】:

我将我的项目从“标准”托管移动到 Azure,并在尝试使用 url-rewrite 打开页面时遇到相同的错误。 IE。规则是:

<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 可以毫无问题地打开)。

我检查了完整的网站 - 从未使用 .. 来“升级”

【讨论】:

【参考方案10】:

这意味着其中一个路径的开头有一个“..”,这将导致退出网站的根文件夹层次结构。您需要谷歌“asp.net 相对路径”或类似的东西来帮助您解决问题。

顺便说一句,问题所在的提示包含在您看到的异常页面中。它实际上会告诉你它在哪个文件中发现了问题。

为了防止将来发生此异常,请在整个解决方案中搜索此字符串:“../”。如果您在网站根路径的文件中找到任何这些,请解决它们。

【讨论】:

【参考方案11】:

这意味着您的网页所引用的内容是在您的网页上一级文件夹中的内容,但您的网页已经在网站的根文件夹中,因此相对路径无效。从您的异常消息来看,似乎是图像控件导致了问题。

你必须有类似的东西:

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

但是由于页面本身在网站的根文件夹中,它不能引用上一级的内容,这就是领先的..\正在做的事情。

【讨论】:

如何追踪大型网站中哪些文件存在问题?直接输出似乎没有提供细节。 @JohnK 对于堆栈跟踪中报告的页面(以及使用的任何母版页),您必须使用 [binary chop](wiki.c2.com/?BinaryChop):切掉第一个你程序的一半。事情还搞砸了吗?如果是这样,问题一定出在下半场。否则很可能是第一个。验证这一点。现在取出你知道问题所在的那一半,然后砍掉一半。重复直到你说啊哈,或者你发现一个环境问题

以上是关于不能使用前导 ../ 退出***目录的主要内容,如果未能解决你的问题,请参考以下文章

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

退出 python命令行,Pycharm不能使用Ctrl+C 和Ctrl+V复制粘贴的问题

python中使用sys模块中sys.exit()好像不能退出?

secureCRT不能退出ping指令

向日葵远程不能退出腾讯安全管家,点退出时没反应,也不能远程卸载

visual studio installer 卸载时不能删除安装目录问题