119 votes

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

J'ai un problème de code hérité qui exige que je prenne en charge des urls aléatoires comme s'il s'agissait de requêtes pour la page d'accueil. Certaines de ces URL contiennent des caractères qui génèrent l'erreur suivante "Une valeur potentiellement dangereuse de Request.Path a été détectée depuis le client (&)" . Le site est écrit avec ASP.Net MVC 3 (en C#) et fonctionne sur IIS 7.5.

Voici un exemple d'URL...

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

Voici comment j'ai configuré ma route "attrape-tout" (j'ai d'autres routes 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 doit capturer les urls...

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

Mais je reçois toujours l'erreur. Une idée de la raison ? Ai-je manqué quelque chose ? Pour l'instant, je ne fonctionne que sur mon serveur de développement local (je n'ai pas encore essayé ces corrections en production).

1 votes

Il y a un paramètre pour autoriser certains caractères que je vérifierai bientôt quand je serai de retour sur mon ordinateur...... mais pouvez-vous urlencoder votre URL ?

0 votes

0 votes

Je ne sais pas pour quelle raison le site web essayait en interne une redirection qui créait une URL comme ''. localhost/://localhost/myWebsiteName qui me donnait la même erreur. Je ne sais pas pourquoi ASP.net pipeline considère que c'est une URL de requête dangereuse.

165voto

Alexander Prokofyev Points 14183

Vous pouvez essayer les paramètres suivants 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'accès à l'URL en les remplaçant par des tirets bas.

14 votes

Il semble que le requestPathInvalidCharacters="" ait fait l'affaire. Merci. Je suis tout à fait d'accord pour dire qu'il ne faut pas utiliser & dans le chemin d'accès. Malheureusement, nous l'autorisons depuis des années et nous devons continuer à le faire.

5 votes

Ce n'est pas un problème de sécurité ?

3 votes

@MariusStanescu - Ce n'est pas un problème de sécurité en soi ; cela dépend de ce que vous en faites. Si l'entrée est prise, échappée et incluse dans la sortie, tout va bien. S'il n'est pas échappé, alors vous pouvez vous exposer à une attaque.

6voto

reza.cse08 Points 3293

J'ai été confronté à ce type d'erreur. pour appeler une fonction depuis le rasoir.

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

a résolu ce problème en modifiant la ligne

de

<a href="http://stackoverflow.com/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

à

<a href="http://stackoverflow.com/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />

où se trouve 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
        );

0 votes

Est EditorAjax y ApIController (par rapport au contrôleur de vue) ? J'ai les deux et ApiController prend bien les paramètres d'URL, car les valeurs par défaut le permettent probablement parce que c'est un usage courant. Le seul problème que j'ai maintenant est que je veux ajouter des paramètres d'URL aux contrôleurs de vue.

1voto

Pavan Points 39

Si vous voulez autoriser les balises Html uniquement pour quelques zones de texte dans le mvc.

Vous pouvez faire une chose

en 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 votes

Le PO parle explicitement des URL qu'il doit prendre en charge (et non du contenu des zones de texte) et il n'est pas non plus question de HTML - votre réponse ne s'applique donc pas vraiment à la question posée.

2 votes

Cela ne s'applique pas à la question, mais j'ai voté pour car je ne savais pas que c'était une option. Merci @Pavan

0voto

Josh P Points 348

Nous avons obtenu cette même erreur dans Fiddler en essayant de comprendre pourquoi notre visualisateur de carte ArcGIS Silverlight ne chargeait pas la carte. Dans notre cas, il s'agissait d'une erreur de frappe dans l'URL du code. Il y avait un signe égal dans le code pour une raison quelconque.
http:=//someurltosome/awesome/place
au lieu de
http://someurltosome/awesome/place

Après avoir supprimé le signe égal, tout s'est bien passé (bien sûr).

0voto

Balamurugan Points 84

Vérifiez que les lignes suivantes sont présentes dans votre fichier web.config

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X