2010-03-18 4 views
4

J'ai installé VS2010 et MVC2 et testé un formulaire simple en utilisant tinyMCE. Quand je posterai le contenu du textarea dans tinyMCE je reçois le redoutée YSD et le messageune valeur request.form potentiellement dangereuse a été détectée mais validateinput (false) ne fonctionne pas

« un potentiellement dangereux ..... »

Je l'ai vu avant, donc je mets la ValidateInput(false) sur le contrôleur mais pas de joie - je reçois toujours l'erreur.

code page Edit.aspx est:

<% using (Html.BeginForm()){ %> 

    <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded --> 
    <textarea id="elm1" name="mceText" rows="15" cols="80" style="width: 80%"> 
     &lt;p&gt; 
      This is some example text that you can edit inside the 
    &lt;strong&gt; TinyMCE editor&lt;/strong&gt;. 
    </textarea> 

    <br /> 
    <input type="submit" name="save" value="Submit" /> 
    <input type="reset" name="reset" value="Reset" /> 
<%} %> 

et de l'action du contrôleur est:

[AcceptVerbs(HttpVerbs.Post)] 
    [ValidateInput(false)] 
    public ActionResult Edit(string mceText) 
    { 

     return View(); 
    } 

Toutes les pensées - (Je sais que le code est Incomplet) essayé pendant des heures, mais tout le monde dit simplement d'utiliser ValidateInput (false)

+0

Est-ce que cela fonctionne quand vous le désactivez globalement en mettant dans web.config? –

+0

Merci pour la suggestion, mais cela ne fonctionne pas. J'ai lu un commentaire de Phil Haack disant qu'il est trop tard dans web.config car le code du contrôleur a déjà été lancé. –

Répondre

5

Voici pourquoi: http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#0.1__Toc256770147

La demande fonctionnalité de validation dans ASP.NET fournit un certain niveau de protection par défaut contre cross attaques de script de site (XSS). Dans versions précédentes d'ASP.NET, la validation de la demande a été activée par par défaut. Toutefois, il s'applique uniquement aux pages ASP.NET (fichiers .aspx et leurs fichiers de classe) et uniquement lorsque ces pages étaient en cours d'exécution.

Dans ASP.NET 4, par défaut, la validation des demandes est activée pour toutes les demandes , car elle est activée avant la phase BeginRequest d'une requête HTTP . Par conséquent, la validation de la demande s'applique aux demandes de toutes les ressources ASP.NET, pas seulement les demandes de page .aspx. Cela inclut les demandes telles que les appels de service Web et les gestionnaires HTTP personnalisés. La validation de la demande est également active lorsque les modules HTTP personnalisés lisent le contenu d'une requête HTTP. En conséquence, des erreurs de validation de la requête peuvent maintenant se produire pour les demandes qui ne déclenchaient pas d'erreurs auparavant. Pour revenir au comportement de la fonctionnalité de validation de la demande ASP.NET 2.0, ajoutez le paramètre suivant dans le fichier web.config:

<httpRuntime requestValidationMode="2.0" /> 

Cependant, nous vous recommandons d'analyser les erreurs de validation de la demande pour déterminer si les gestionnaires, modules ou autres codes personnalisés existants accèdent à des entrées HTTP potentiellement dangereuses susceptibles d'être attaquées par XSS par des vecteurs .

3

Trouvé.

besoin d'ajouter <httpRuntime requestValidationMode="2.0"/>

dans web.config

+0

La réponse ne s'est pas affichée il devrait dire

3

Avec seulement: encodage: « xml » guillemets simples sont codés dans: & # 39, mais la validation ASP.NET traite que comme une faille de sécurité, nous devons remplacer tous & # 39 au format html & ampli:

tinyMCE.init({ 
// ... 
encoding: "xml", 
setup: function (ed) { 
ed.onSaveContent.add(function (ed, o) { 
o.content = o.content.replace(/&#39/g, "&apos"); 
}); 
} 
}); 

Merci Eddie.

Questions connexes