Obtenir "une demande potentiellement dangereuse.La valeur du chemin d'accès a été détectée à partir du client (&)"

J'ai un problème de code hérité qui nécessite que je supporte les URL aléatoires comme s'il s'agissait de demandes pour la page d'accueil. Certaines URL contiennent des caractères qui génèrent l'erreur " une requête potentiellement dangereuse.La valeur du chemin d'accès a été détectée à partir du client (&)". Le site est écrit avec ASP.Net MVC 3 (en C#) et est en cours D'exécution sur IIS 7.5.

Voici un exemple D'URL...

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

Voici comment j'ai ma configuration de route fourre-tout (j'ai d'autres routes à attraper spécifiques page)...

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 site web.fichier de configuration...

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

J'ai également ajouté L'attribut ValidateInput à l'action qui devrait attraper 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 raté quelque chose? En ce moment, je suis juste en cours d'exécution sur mon serveur de développement local (Je n'ai pas encore essayé ces correctifs en production).

103
demandé sur Brian 2011-05-17 06:11:41

4 réponses

Alors que vous pouvez 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 D'URL en les remplaçant par des traits de soulignement.

154
répondu Alexander Prokofyev 2011-05-17 04:36:40

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

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

Résolvez 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ù mon itinéraire.config est

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
répondu reza.cse08 2016-05-11 21:51:22

Si vous souhaitez autoriser les balises Html uniquement pour quelques zones de texte dans mvc

, Vous pouvez 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
répondu Pavan 2013-02-19 05:09:25

Nous obtenions cette même erreur dans Fiddler en essayant de comprendre pourquoi notre visualiseur de cartes Silverlight ArcGIS ne chargeait pas la carte. Dans notre cas, c'était une faute de frappe dans l'URL dans le code. Il y avait un signe égal là-dedans pour une raison quelconque.
http:=//someurltosome/awesome/place
au lieu de
http://someurltosome/awesome/place

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

0
répondu Josh P 2016-04-21 20:54:46