usar - Validación de URL ASP.NET
url rewrite iis (5)
Tenemos un controlador REST personalizado en ASP.NET que está configurado así para manejar todas las solicitudes entrantes:
<add path="*" verb="*" type="REST.RESTProtocolHandler"/>
Sin embargo, al pasarle un carácter de pipa, codificado correctamente o no en absoluto, desencadena un error de validación que parece provenir de ASP.NET.
Accediendo a http://localhost:8080/%7c
o http://localhost:8080/|
produce este error:
[ArgumentException: caracteres no válidos en la ruta.] System.IO.Path.CheckInvalidPathChars (String path) +7489125 System.IO.Path.Combine (String path1, String path2) +40 System.Web.Configuration.UserMapPath.GetPhysicalPathForPath (String path , Asignación de VirtualDirectoryMapping) +114 System.Web.Configuration.UserMapPath.GetPathConfigFilename (String siteID, VirtualPath path, String & directory, String y baseName) +72 System.Web.Configuration.UserMapPath.MapPath (String siteID, VirtualPath path) +30 Sistema. Web.Configuration.UserMapPath.MapPath (String siteID, String path) +31 System.Web.Hosting.HostingEnvironment.MapPathActual (VirtualPath virtualPath, Boolean permitNull) +297 System.Web.Hosting.HostingEnvironment.MapPathInternal (VirtualPath virtualPath, Boolean permitNull) +51 System.Web.CachedPathData.GetConfigPathData (String configPath) +341 System.Web.CachedPathData.GetVirtualPathData (VirtualPath virtualPath, boolean allowedPathsOutsideApp) +110 System.Web.HttpContext.GetFilePathData () +36 System.Web .HttpContext.GetConfigurationPathData () +26 System.Web.Configuration.RuntimeConfig.GetConfig (HttpContext context) +43 System.Web.Configuration.CustomErrorsSection.GetSettings (HttpContext context, Boolean canThrow) +41 System.Web.HttpResponse.ReportRuntimeError (Excepción e, Boolean canThrow, Boolean localExecute) +101 System.Web.HttpRuntime.FinishRequest (HttpWorkerRequest wr, HttpContext context, Exception e) +383
No se ejecuta ningún código de usuario. ¿Es esta una opción de configuración en alguna parte? Reproducido en el servidor de desarrollo 2008 de IIS 7 & VS Studio.
Stack Overflow parece manejar este error. De acuerdo, parece que una página 404 MVC generada dinámicamente se representa para https://stackoverflow.com/%7c .
¿Algunas ideas?
Creo que la respuesta está en tu rastro de pila. El error se genera en la llamada a System.IO.Path.CheckInvalidPathChars (); no se está verificando la URL, sino que se está verificando el sistema de archivos de Windows en el que se encuentra IIS. No se trata tanto de que el personaje de la tubería sea Url ilegal, sino básicamente DOS ilegal.
Si intercepta la URL antes de que IIS intente encontrar la ruta de coincidencia en el servidor, espero que pueda solucionar este error. Probablemente eso radique en tener una regla de reescritura o similar para encontrar y reescribir la URL con caracteres no deseados.
De manera predeterminada, IIS no permite ciertos caracteres en la URL y los considera ilegales. Aquí es de donde viene tu problema, ni siquiera llama al manejador que tienes. Por lo que yo sé, no hay lugar en el que pueda configurar los caracteres que se aceptan a través de la interfaz de usuario, a excepción del registro de Windows. No sé por qué quieres usar tubería, pero no creo que sea una buena práctica. En cuanto a la página de error, siempre puede tener su propia página de error para cualquier excepción, para que los usuarios no vean los mensajes desagradables.
Intente interceptar la excepción en el archivo Global.asax. Implementar allí (Global.asax.cs) este método:
protected void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
//do whatever you want with that exception
//or get the url from the context, reformat and redirect
}
Tengo un programa similar que intercepta todo y probarlo con una tubería me da el mismo error. Supongo que tiene que ver con IIS haciendo pruebas de ruta (mappath) antes de saber quién debe manejar la solicitud. Su controlador toma la raíz (es decir, todas las llamadas), pero asumo que la forma en que lo hace IIS es genérica.
Así que supongo que cualquiera o la mayoría de los caracteres de ruta que no puede usar en su sistema de archivos fallarán en la solicitud de IIS (GET / POST).
Tal vez alguien sepa cómo deshabilitar la verificación de IIS. Según el error, parece suceder incluso antes de que se lea su web.config, ya que está tratando de encontrar la configuración correcta.
Tal vez es posible usar su propia página de error como una redirección a su manejador?
Primero necesita jugar en el Registro:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;826437
Reiniciar IIS
y listo, funciona
Pero he hecho que esto funcione con IIS7 sin problemas, pero con IIS6 obtengo este error (caracteres ilegales en la ruta).