Obtention de "Une valeur Request.Path potentiellement dangereuse a été détectée à partir du client (&)"

114

J'ai un problème de code hérité qui nécessite que je prenne en charge 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 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é ma route fourre-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 devrait intercepter les URL ...

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

Mais j'obtiens toujours l'erreur. Des idées pourquoi? Ai-je oublié quelque chose? Pour le 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).

Brian
la source
1
Il y a un paramètre pour autoriser certains caractères que je vérifierai bientôt une fois de retour sur l'ordinateur ...... mais pouvez-vous encoder votre URL?
Adam Tuliper - MSFT
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 le pipeline ASP.net le considère comme une URL de requête dangereuse.
RBT
Dans mon cas, il me manquait une barre oblique dans l'URL. La première chose à faire serait de rechercher une faute de frappe dans l'URL.
Kishan Vaishnav

Réponses:

162

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 traits de soulignement.

Alexandre Prokofyev
la source
13
Il semble que requestPathInvalidCharacters = "" ait fait l'affaire. Merci. Je suis tout à fait d'accord pour dire que vous ne devriez pas utiliser & sur le chemin, malheureusement, nous l'autorisons depuis des années, nous devons donc continuer à le soutenir.
Brian
5
N'est-ce pas un problème de sécurité?
Marius Stănescu
3
@MariusStanescu - Ce n'est pas intrinsèquement un problème de sécurité; cela dépend de ce que vous en faites. Si l'entrée est prise et échappée et incluse avec la sortie, tout ira bien. S'il n'est pas échappé, vous pourriez vous exposer à une attaque.
Justin Helgerson
2
Cette solution peut vous donner cette erreur: Erreur HTTP 500.19 - Erreur de serveur interne La page demandée n'est pas accessible car les données de configuration associées pour la page ne sont pas valides.
Tom Stickel
2
J'ai également reçu une erreur 500 lors de l'utilisation de cette réponse. Cela était dû au fait qu'il y avait déjà des balises <httpRuntime> et <pages>, il y avait donc un conflit de duplication. Après avoir résolu cela, cette réponse fonctionne très bien pour moi aussi.
Kallum Tanton
5

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ù 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
        );
reza.cse08
la source
1

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();
}
Pavan
la source
1
L'OP parle explicitement des URL qu'il doit prendre en charge (pas du contenu de la zone de texte) et il n'y a pas non plus de mention de HTML - votre réponse ne s'applique donc vraiment pas à la question donnée.
Oliver
2
Cela ne s'applique pas à la question, mais j'ai voté pour parce que je ne savais pas que c'était une option. Merci @Pavan
MickJuice
0

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

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

Josh P
la source
0

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

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

Balamurugan
la source