2010-02-14 19 views
37

Tengo un sitio web asp.net con el que tenemos el área de administración con la página de inicio de sesión solo para el administrador y todo el sitio está permitido para todos - necesito preguntar cómo hacerlo definir la configuración de seguridad adecuado para ello como me sale este errorNo se puede usar un directorio ../ para salir del directorio superior

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

mi fichero de configuración:

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

+0

¿Cuál es la solicitud que ocasiona esto? –

Respuesta

54

Lo que esto significa es que su página web se refiere al contenido que se encuentra en la carpeta de un nivel superior de la página, pero la página ya está en la carpeta raíz del sitio web, por lo que la ruta relativa es inválido. A juzgar por su mensaje de excepción, parece que un control de imagen está causando el problema.

Usted debe tener algo como:

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

Pero desde la propia página se encuentra en la carpeta raíz del sitio web, no puede hacer referencia al contenido de un nivel superior, que es lo que el líder ..\ está haciendo.

+5

¿Cómo se hace para rastrear qué archivos tienen el problema en un sitio web grande? El resultado inmediato no parece proporcionar detalles. –

+1

@JohnK tiene que recurrir a [binary chop] (http://wiki.c2.com/?BinaryChop) para la página que se informa en el seguimiento de pila (y las páginas maestras utilizadas): _Chop out the first half de tu programa. ¿Las cosas todavía salen mal? Si es así, el problema debe ser en la segunda mitad. De lo contrario, es probable en el primero. Comprueba eso. Ahora toma la mitad donde sabes que el problema yace y corta la mitad. Repita hasta que diga AhHa, o descubra un EnvironmentProblem_ –

9

tiene una imagen o un enlace favicon del estilo ="../" en alguna parte, que si el "../" eran válidos, iría más allá de la parte superior de la página, así:

Image:

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

página

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

válido en esa página: ../Images/test.jpg
arrojaría un error: ../../Images/test.jpg

15

Puede utilizar ~/img/myImage.png en lugar de ../img/myImage.png Para evitar este error en las páginas ASP.NET.

2

Significa que una de las rutas tiene un ".." al principio que daría como resultado la salida de la jerarquía de la carpeta raíz del sitio web. Debes buscar en google "rutas relativas a asp.net" o algo así para ayudarte con tu problema.

BTW, una pista de dónde está el problema está incluido en la página de excepción que vio. En realidad, le dirá en qué archivo encontró el problema.

Para evitar futuras apariciones de esta excepción, haga una búsqueda en toda la solución para esta cadena: "../". Si encuentra alguno de esos archivos en la ruta raíz de su sitio web, hágalos.

0

Moví mi proyecto de hosting "estándar" a Azure y obtuve el mismo error cuando intento abrir la página con url-rewrite. Es decir. regla es:

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

intente abrir my_site/iPod-eBook-Creator.html y obtener este error (página my_site/Product/ProductDetail? PRODUCT_UID = IPOD_EBOOK_CREATOR se puede abrir sin ningún problema).

he comprobado el sitio completamente - nunca utilizado .. a "subir de nivel"

0

que tenían un problema de este tipo y la respuesta, aunque frustrante para encontrar, se resolvió mediante una búsqueda en la página ofensiva para el " .. "en el mensaje de error. Estoy usando Visual Studio Express y la solución estaba cambiando "../../Images/" a "~/Images /". Espero que esto ayude a alguien.

0

Tuve el problema en mi sistema de una manera muy extraña. En mi sistema, los clientes crean productos que se encuentran dentro de una estructura de directorios de categorías de productos. Entonces, ProductA podría sentarse en la carpeta CategoryInner dentro de la carpeta CategoryOuter. Acababa añadido una característica que mi URL mostraría la categoría que anidan en la URL de esta manera:

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

Es evidente que la anidación en el URL era sólo para fines de SEO (y para mostrar al usuario qué categoría era su producto sentado. Pero cuando utilicé ResolveClientUrl en algunas URL que solían funcionar, debe haber sido confundido por la ruta falsa adicional. El mensaje de error aparecía en el depurador en alguna línea que nunca fue el problema, así que me tomó bastante algún tiempo para descubrir qué estaba pasando. Completé y eliminé todas mis llamadas a ResolveClientUrl que actuaban sobre cualquier cosa que no comenzara con un ~ y convirtiera el resto de las rutas en rutas absolutas.

1

¡En mi caso, resultó ser un comentario HTML en una página maestra!

¡Quién sabe si HTML interpretado como este en realidad fue interpretado por ASP.NET!

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