不能使用前导../来退出顶层目录

我有一个asp.net的网站,我们有pipe理员只有pipe理员的login页面的所有网站是允许所有 – 我需要问如何定义正确的安全configuration,因为我得到这个错误

 不能使用前导..从顶端目录之上退出。 
说明:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪,了解有关错误的更多信息以及源代码的位置。 

exception详细信息:System.Web.HttpException:不能使用前导..以退出顶部目录。

源错误: 

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

堆栈跟踪: 


 [HttpException(0x80004005):不能使用前导..以退出顶部目录。]
    System.Web.Util.UrlPath.ReduceVirtualPath(String path)+8862087
    System.Web.Util.UrlPath.Reduce(String path)+52
    System.Web.Util.UrlPath.Combine(stringappPath,stringbasepath,string相对)+214
    System.Web.UI.Control.ResolveClientUrl(String relativeUrl)+180
    System.Web.UI.WebControls.Image.AddAttributesToRender(HtmlTextWriter作家)+68
    System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter作家)+20
    System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter作家)+20
    System.Web.UI.Control.RenderControlInternal(HtmlTextWriter作家,ControlAdapter适配器)+27
    System.Web.UI.Control.RenderControl(HtmlTextWriter作家,ControlAdapter适配器)+99
    System.Web.UI.Control.RenderControl(HtmlTextWriter作家)+25
    System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter作家,ICollection的孩子)+134
    System.Web.UI.Control.RenderChildren(HtmlTextWriter作家)+19
    System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter作家)+163
    System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter作家)+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作家)+40
    System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter作家,ICollection的孩子)+134
    System.Web.UI.Control.RenderChildren(HtmlTextWriter作家)+19
    System.Web.UI.Control.Render(HtmlTextWriter作家)+10
    System.Web.UI.Control.RenderControlInternal(HtmlTextWriter作家,ControlAdapter适配器)+27
    System.Web.UI.Control.RenderControl(HtmlTextWriter作家,ControlAdapter适配器)+99
    System.Web.UI.Control.RenderControl(HtmlTextWriter作家)+25
    System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter作家,ICollection的孩子)+134
    System.Web.UI.Control.RenderChildren(HtmlTextWriter作家)+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作家)+25
    System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+1266 

我的configuration文件:

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

这意味着你的网页是指从你的页面上的文件夹中的内容,但是你的页面已经在网站的根文件夹中,所以相对path是无效的。 根据您的exception消息来看,它看起来像是一个图像控制器造成的问题。

你必须有这样的东西:

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

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

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

你有一个图像或favicon链接的style ="../"地方,如果“../”是有效的,将超越网站的顶部,如下所示:

图片:

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

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

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

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

顺便说一句,问题的提示包含在你看到的例外页面。 它实际上会告诉你什么文件发现了问题。

为了避免将来发生此exception,请在整个解决scheme中search此string:“../”。 如果您在网站的根path中find任何文件,请解决它们。

我将项目从“标准”托pipe移到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可以打开没有任何问题)。

我检查完整的网站 – 从来没有使用..“升级”

我有这样一个问题,答案虽然令人沮丧,但通过在错误信息中的“..”的有问题的页面上search来解决。 我正在使用Visual Studio Express,解决scheme将“../../Images/”更改为“〜/ Images /”。 希望这会帮助某人。

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

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

显然,在URL上的嵌套仅仅是为了SEO的目的(并向用户显示他们的产品所属的类别。但是当我在一些曾经工作的URL上使用ResolveClientUrl时,它一定被额外的假path所困惑。这个错误消息在debugging器中popup,这根本不是问题,所以我花了相当长的时间来弄清楚发生了什么。我通过并删除了所有的ResolveClientUrl调用,从〜开始,并将path的其余部分作为绝对path。

在我的情况下,原来在主页面上被注释掉了HTML!

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

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