2011-05-17 12 views
97

Tengo un problema con el código heredado que requiere que admita URL aleatorias como si fueran solicitudes para la página de inicio. Algunas de las URL tienen caracteres que generan el error "Se detectó un valor Request.Path potencialmente peligroso desde el cliente (&)". El sitio está escrito con ASP.Net MVC 3 (en C#) y se ejecuta en IIS 7.5.Obteniendo "Se detectó un valor Request.Path potencialmente peligroso desde el cliente (&)"

He aquí un ejemplo de URL ...

http://mywebsite.com/Test123/This_&_That 

Así es como tengo mi cajón de sastre configuración de ruta (tengo otras rutas para la captura de páginas específicas) ...

routes.MapRoute(
    "Default", // Route name 
    "{garb1}/{garb2}", // URL with parameters 
    new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults 
); 

I' hemos añadido las siguientes cosas a mi archivo web.config ...

<configuration> 
    <system.web> 
     <pages validateRequest="false" /> 
     <httpRuntime requestValidationMode="2.0" /> 
    </system.web> 
<configuration> 

también he añadido el atributo ValidateInput a la acción que sh debería estar atrapando las URL ...

public class WebsiteController : Controller 
{ 
    [ValidateInput(false)] 
    public ActionResult Home() 
    { 
     return View(); 
    } 
} 

Pero sigo recibiendo el error. ¿Alguna idea de por qué? ¿Me he perdido algo? Ahora mismo estoy ejecutando mi servidor de desarrollo local (todavía no he probado estas soluciones en producción).

+1

Hay una configuración para permitir ciertos caracteres que revisaré en breve cuando vuelva a estar en la computadora ... pero ¿puede urlencodear su URL? –

+0

posible duplicado de [Se detectó un valor Request.Path potencialmente peligroso desde el cliente (\ *)] (http://stackoverflow.com/questions/5967103/a-potentially-dangerous-request-path-value-was-detected -desde el cliente) – Marijn

+0

No sé por qué motivo el sitio web estaba intentando internamente una redirección que creaba una URL como 'http: // localhost /: // localhost/myWebsiteName /' que me daba el mismo error. No sé por qué ASP.net pipeline lo considera una URL de solicitud peligrosa. – RBT

Respuesta

146

Mientras que usted podría probar esta configuración en el archivo de configuración

<system.web> 
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" /> 
    <pages validateRequest="false" /> 
</system.web> 

que evitaría el uso de personajes como '&' en ruta URL reemplazándolos con guiones bajos.

+10

Parece que requestPathInvalidCharacters = "" hizo el truco. Gracias. Definitivamente estoy de acuerdo en que no debes usar & en el camino, lamentablemente lo hemos estado permitiendo durante años, así que tenemos que seguir apoyándolo. – Brian

+5

¿no es eso un problema de seguridad? –

+2

@MariusStanescu - No es intrínsecamente un problema de seguridad; depende de lo que hagas con eso. Si la entrada se toma y se escapa y se incluye con la salida, estará bien. Si no se escapó, entonces podrías abrirse a un ataque. –

1

Si desea permitir que las etiquetas HTML sólo para unos pocos cuadro de texto en mvc

Usted puede hacer una cosa

en el controlador

[ValidateInput(false)] 
public ActionResult CreateNewHtml() //view 
{ 
    return View(); 
} 
[ValidateInput(false)] 
[HttpPost] 
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class 
{ 
    repo.AddHtml(obj); 
    return View(); 
} 
+1

El OP explícitamente habla de las URL que necesita para soporte (no contenido de cuadro de texto) y tampoco hay mención de HTML, por lo que su respuesta realmente no se aplica a la pregunta dada. – Oliver

+2

No se aplica a la pregunta, pero voté como algo que no sabía era una opción. Gracias @Pavan – MickJuice

0

Estábamos a este mismo error en Fiddler cuando se trata de averiguar por qué nuestro visor de mapas Silverlight ArcGIS no estaba cargando el mapa. En nuestro caso, fue un error tipográfico en la URL del código. Había un signo igual allí por alguna razón.
http: // = someurltosome/impresionante/lugar
en lugar de
http://someurltosome/awesome/place

Después de que la igualdad de signo funcionó muy bien (por supuesto).

5

Me he enfrentado a este tipo de error. para llamar a una función desde la afeitadora.

public ActionResult EditorAjax(int id, int? jobId, string type = ""){} 

resolver que al cambiar la línea

de

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

a

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" /> 

donde mi ruta.config es

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults 
     ); 
Cuestiones relacionadas