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).
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.
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
);
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();
}
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).