23 votes

Une valeur potentiellement dangereuse de Request.Form a été détectée

J'ai un formulaire avec l'éditeur wmd dessus. La zone de texte de saisie est rendue à l'aide de :

<%: Html.TextAreaFor(t => t.NewsBody, new{@class="wmd-panel", id="wmd-input"}) %>

Chaque fois que je soumets le formulaire, j'obtiens A potentially dangerous Request.Form value was detected from the client

J'ai essayé de définir [ValidateInput(false)] sur la méthode d'action, j'ai essayé d'ajouter <httpRuntime requestValidationMode="2.0" /> au web.config et j'ai essayé validateRequest="false" dans la directive pages dans web.config mais cela se produit toujours.

Des idées ?

Modifier

Méthode d'action :

 [ILFFAuthorize(Roles = "Admin")] // this is a custom auth attrobite
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult AddNews(FormCollection col){

        //public ActionResult AddNews(News news)
        //{
            if (ModelState.IsValid)
            {
                News news = new News();
                news.NewsDate = DateTime.Now;
                news.NewsPosterId = 0;

                news.NewsTitle = col["NewsTitle"];
                news.NewsBody = col["NewsBody"];
                newsRepository.Add(news);
                newsRepository.Save();

                return RedirectToAction("Index", "Home");
            }
            else
            {
                return View();
            }
        }

25voto

Stefanvds Points 3659

Vous devez placer ceci au dessus de votre [HttpPost] méthode d'action

    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Edit(FormCollection collection) {
       .....
    }

Si vous utilisez MVC3 alors vous ne devez pas utiliser [ValidateInput(false)] mais utiliser [AllowHtml] qui est expliqué ici : http://dailydotnettips.com/2011/08/24/how-to-allow-user-to-input-html-in-asp-net-mvc/

également : essayez de mettre [ValidateInput(false)] au-dessus de votre [HttpPost] pas en dessous. Si je me souviens bien, ils sont exécutés de haut en bas.

6voto

TheHurt Points 1054

Dans MVC 3, ajoutez [AllowHtml] à la propriété du modèle de vue qui ne doit pas être validée.

4voto

Mahdi jokar Points 509

Dans le fichier web.config, à l'intérieur des balises, insérez l'élément httpRuntime avec l'attribut requestValidationMode="2.0". Ajoutez également l'attribut validateRequest="false" dans l'élément pages.

Ejemplo:

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

2voto

Mayo Points 5532

En règle générale, vous obtiendrez ce type d'erreur si vous envoyez des messages à une méthode d'action qui n'autorise pas les valeurs de formulaire potentiellement dangereuses. Si vous tenez compte de ce fait et du fait que vous avez manifestement choisi d'autoriser de telles valeurs pour une méthode d'action donnée, vous devez en conclure que vous vous connectez à une méthode d'action différente.

Pouvez-vous essayer de poster une chaîne standard (par exemple "hello") sans WMD et vérifier si vos points d'arrêt dans la méthode d'action sélectionnée sont atteints ?

2voto

Deepak Points 1

Utiliser [ValidateInput(false)] pour résoudre ce type d'erreur

Cela se produit parce que l'entrée de l'utilisateur contient diverses balises html. L'architecture MVC3 n'a donc pas la permission pour ce type d'entrée.

Nous pouvons supprimer cette erreur en écrivant [ValidateInput(false)] au-dessus du résultat d'une action ou à l'endroit où nous soumettons notre formulaire. Cette commande va désactiver la validation du formulaire pour les balises html.

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