web-dev-qa-db-fra.com

Obtenir "Une valeur Request.Path potentiellement dangereuse a été détectée par le client (&)"

J'ai un problème de code hérité qui nécessite de prendre en charge des URL aléatoires comme s'il s'agissait de demandes pour la page d'accueil. Certaines des URL contiennent des caractères qui génèrent l'erreur "Une valeur Request.Path potentiellement dangereuse a été détectée par le client (&)" . Le site est écrit avec ASP.Net MVC 3 (en C #) et s'exécute sur IIS 7.5.

Voici un exemple d'URL ...

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

Voici comment j'ai configuré mon itinéraire général (j'ai d'autres itinéraires pour attraper des pages spécifiques) ...

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

J'ai ajouté les éléments suivants à mon fichier web.config ...

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

J'ai également ajouté l'attribut ValidateInput à l'action qui devrait intercepter les URL ...

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

Mais je reçois toujours l'erreur. Des idées pourquoi? Ai-je manqué quelque chose? Pour le moment, je ne fais que tourner sur mon serveur de développement local (je n'ai pas encore essayé ces correctifs en production).

109
Brian

Bien que vous puissiez essayer ces paramètres dans le fichier de configuration

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

J'éviterais d'utiliser des caractères comme '&' dans le chemin de l'URL en les remplaçant par des soulignés.

157

J'ai fait face à ce type d'erreur. appeler une fonction de rasoir. 

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

résoudre cela en changeant la ligne 

de

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

à

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

où est mon 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
        );
5
reza.cse08

Si vous souhaitez autoriser les balises HTML uniquement pour quelques zones de texte dans MVC

Tu peux faire une chose

dans le contrôleur

 [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
Pavan

Vérifiez que les lignes ci-dessous sont présentes dans votre fichier web.config

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

0
Balamurugan

Nous avons eu cette même erreur dans Fiddler en essayant de comprendre pourquoi notre afficheur de carte Silverlight ArcGIS ne chargeait pas la carte . Il y avait un signe égal dedans pour une raison quelconque.
http: = // someurltosome/awesome/place
au lieu de
http: // someurltosome/awesome/place

Après avoir éliminé ce signe égal, cela a bien fonctionné (bien sûr).

0
Josh P