Obteniendo "Se detectó un valor Request.Path potencialmente peligroso del cliente (&)"

114

Tengo un problema de 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 del cliente (&)" . El sitio está escrito con ASP.Net MVC 3 (en C #) y se ejecuta en IIS 7.5.

Aquí hay una URL de ejemplo ...

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

Así es como tengo la configuración de mi ruta general (tengo otras rutas para capturar 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
);

He agregado las siguientes cosas a mi archivo web.config ...

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

También agregué el atributo ValidateInput a la acción que debería capturar 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? En este momento solo estoy corriendo en mi servidor de desarrollo local (todavía no he probado estas correcciones en producción).

Brian
fuente
1
Hay una configuración para permitir ciertos caracteres que verificaré en breve cuando vuelva a la computadora ... pero ¿puedes codificar tu URL con urlencode?
Adam Tuliper - MSFT
No sé por qué el sitio web estaba intentando internamente una redirección que estaba creando una URL como ' localhost /: // localhost / myWebsiteName ' que me estaba dando el mismo error. No sé por qué la canalización de ASP.net la considera una URL de solicitud peligrosa.
RBT
En mi caso, me faltaba una barra en la URL. Lo primero que debe hacer es verificar si hay un error tipográfico en la URL.
Kishan Vaishnav

Respuestas:

162

Si bien puede probar estas configuraciones en el archivo de configuración

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

Evitaría usar caracteres como '&' en la ruta de la URL reemplazándolos con guiones bajos.

Alexander Prokofyev
fuente
13
Parece que requestPathInvalidCharacters = "" hizo el truco. Gracias. Definitivamente estoy de acuerdo en que no deberías usar & en el camino, desafortunadamente lo hemos estado permitiendo durante años, por lo que debemos continuar apoyándolo.
Brian
5
¿No es eso un problema de seguridad?
Marius Stănescu
3
@MariusStanescu: no es inherentemente un problema de seguridad; depende de lo que hagas con él. Si la entrada se toma y se escapa y se incluye con la salida, estará bien. Si no se ha escapado, es posible que se exponga a un ataque.
Justin Helgerson
2
Esta solución puede darle este error: Error HTTP 500.19 - Error interno del servidor No se puede acceder a la página solicitada porque los datos de configuración relacionados para la página no son válidos.
Tom Stickel
2
También recibí un error 500 al usar esta respuesta. Esto se debió a que ya tenía etiquetas <httpRuntime> y <pages>, por lo que hubo un conflicto de duplicación. Después de resolver eso, esta respuesta también funciona bien para mí.
Kallum Tanton
5

Me he enfrentado a este tipo de error. para llamar a una función de razor.

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

resuelve eso cambiando 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 está mi route.config

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
        );
reza.cse08
fuente
1

Si desea permitir etiquetas Html solo para algunos cuadros de texto en mvc

Puedes 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();
}
Pavana
fuente
1
El OP habla explícitamente de las URL que necesita admitir (no del contenido del cuadro de texto) y tampoco se menciona HTML, por lo que su respuesta realmente no se aplica a la pregunta dada.
Oliver
2
No se aplica a la pregunta, pero voté a favor porque es algo que no sabía que era una opción. Gracias @Pavan
MickJuice
0

Recibíamos este mismo error en Fiddler cuando intentábamos 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 / awesome / place en
lugar de
http: // someurltosome / awesome / place

Después de quitar ese signo igual funcionó muy bien (por supuesto).

Josh P
fuente
0

Compruebe que las siguientes líneas están presentes en su archivo web.config

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>

Balamurugan
fuente