Potentiellement dangereuse Demande.La valeur du formulaire a été détectée par le client

j'ai ce numéro. J'ai tout essayé. ValidateRequest= "false".. et décoder et encoder html.. etc. etc..

ce dont j'ai besoin est une boîte popup (donc j'utilise ModalPopupExtender) pour présenter à un utilisateur où les gens peuvent taper dans les paramètres xml et cliquez sur ok/cancel bouton pour fermer la popup et enregistrer.

Cependant j'obtiens toujours cette erreur "potentiellement dangereuse Demande.La valeur du formulaire a été détectée par le client"..

Voici mon code de test ci-dessous (exemple rapide de mon scénario et de l'erreur)..

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1"
    ValidateRequest="false" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:Panel ID="Popup" runat="server" Width="800px" Style="display: none;">
            <asp:LinkButton ID="Display" runat="server" Style="display: none;" OnClick="Display_Click" />
            <cc1:ModalPopupExtender ID="ModalPopupExtender" runat="server" TargetControlID="Display"
                PopupControlID="Popup" DropShadow="false" Y="10" />
            <div id="Item">
                <div class="Item">
                    <table width="100%">
                        <tr>                                
                            <td>
                                <textarea id="txtAreaValue" cols="35" rows="6" style="resize: none;" runat="server" />
                            </td>
                        </tr>
                        <tr>                                
                            <td>
                                <asp:Button ID="btnOk" Text="Ok" SkinID="default" Width="50px" runat="server" />
                                <asp:Button ID="btnCancel" Text="Cancel" SkinID="default" Width="50px" OnClick="BtnCancel_Click"
                                    runat="server" />
                            </td>
                        </tr>
                    </table>
                </div>
            </div>
        </asp:Panel>
    </div>
    </form>
</body>
</html>

Code Derrière:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ModalPopupExtender.Show();
            string str = "<?xml version="1.0" encoding="utf-8"?><XmlConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <XmlConfig Type="TEST" DefiningXpath="/PERSON/NAME"><Index Name="Name" XPath="/PERSON/NAME/VALUE" Type="String" /><Index Name="Id" XPath="/PERSON/NAME/ID" Type="String" /> </XmlConfig></XmlConfig>";

            txtAreaValue.InnerText = str;
        }

        protected void Display_Click(object sender, EventArgs e)
        {
            //Shows the Item detail Edit box
            ModalPopupExtender.Show();
        }

        protected void BtnCancel_Click(object sender, EventArgs e)
        {
            ModalPopupExtender.Hide();
        }
    }
}

pour lancer le code.. Ajouter ref à AjaxControltoolkit.dll et puis exécuter et vous verrez le textarea être rempli avec xml. Cliquez sur le bouton annuler, ce qui provoque l'erreur. Svp quelqu'un peut m'aider?

24
demandé sur user929153 2012-02-03 18:28:36

8 réponses

Utiliser

<httpRuntime requestValidationMode="2.0" />

dans votre web.config (conserver tous les attributs que vous avez déjà sur cet élément, s'il est déjà là). ASP.NET4.0 ignore ValidateRequest sinon.

et, bien sûr, assurez-vous de prendre les mesures nécessaires pour vous protéger contre les demandes vraiment dangereuses, maintenant que ce n'est pas fait pour vous.

Edit: une grande façon de faire ceci est de créer votre propre classe dérivée de RequestValidator , et en utilisant le comportement 4.0, mais avec cela comme la classe qui fait la vérification.

48
répondu Jon Hanna 2012-02-03 14:38:09

Voici une solution possible qui peut vous aider. Paramétrez la configuration côté serveur pour cela. Si vous voulez autoriser L'élément HTML comme entrée à partir des pages sélectionnées dans votre projet que vous définissez cet attribut de page.

<%@ Page ValidateRequest="false" %>

cette ValidateRequest=" false " sur chaque page. Si vous voulez dans toutes les pages de votre projet que faire des changements dans le Web.Fichier de configuration. Ajouter cette balise dans la section.

si vous utilisez .Net 4.0 que vous avez à faire un changement dans le Web.Fichier de configuration. Ajouter cette balise dans la section.

<httpRuntime requestValidationMode="2.0" />

voici la configuration pour ne pas valider la requête pour toutes les pages de .Net 4.0

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

voici un exemple complet. Cliquez Ici...

29
répondu Jayesh Sorathia 2014-01-03 05:14:33

les gens parlent de Asp.net 4,0 seulement... Je suppose qu'on doit aussi s'occuper d'autres versions. Aujourd'hui, j'ai eu le même problème quand J'ai remplacé mon éditeur AjaxToolkit par TinyMCE et avec le postback j'ai trouvé le même problème.

"potentiellement dangereuse Demande.La valeur du formulaire a été détectée par le client"..

donc j'ai utilisé cette ligne dans mon webconfig et ça a marché pour moi.

<system.web>
    <pages validateRequest="false" />
</system.web>

il devrait fonctionner à travers Asp.net 2,0 à 3,5.

mise à JOUR: fonctionne Même jusqu'à .net 4.5

mise à jour: vous pouvez également essayer de valider la demande au niveau de la page plutôt tout le site. Je voulais juste laisser les lecteurs choisir la meilleure façon. Merci DVD d'avoir souligné cela.

5
répondu KMX 2014-10-23 18:59:46

j'ai créé un article de table avec les colonnes articleId et article_content. J'ai aussi utilisé l'éditeur html pour la colonne article_content. Quand j'ai essayé de sauver j'ai eu la même erreur. Il a été résolu en ajoutant [AllowHtml] à la propriété article_content dans la classe.

 [AllowHtml]
 [Required]
 public string article_content { get; set; }

N'oubliez pas d'inclure L'espace de noms en utilisant le système.Web.Mvc. Pour plus de détails: http://www.infinetsoft.com/Post/A-potentially-dangerous-Request-Form-value-was-detected-from-the-client/1246

1
répondu Mohamed Rasik 2016-05-26 15:11:02

"potentiellement dangereuse Demande.La valeur du formulaire a été détectée par le client"..

1) définir httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\" dans web.config fichier

2) définir validateRequest="false" à côté des pages de tag dans le web.fichier de configuration

<system.web>
    <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"/>
 <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
<system.web>
0
répondu shrikant.Shukla 2014-01-28 09:10:01

j'ai fait face à ce même problème en envoyant des modèles de courrier électronique de la page aspx au code derrière....

donc j'ai essayé de résoudre ce problème en ajoutant

 <httpRuntime requestValidationMode="2.0" />

dans ma configuration web sous enter code here 'mais cela ne m'a pas aidé à moins que je Putte

ValidateRequest="false"

attrribute dans la directive de page de la page aspx.

0
répondu Tapan kumar 2014-03-04 17:46:50

il y a 3 options pour supprimer cette erreur.

  1. Set validateRequest="false" dans la page de directives.
  2. Set validateRequest="false" dans le web.fichier de configuration.
  3. Set requestValidationMode="2.0" dans le web.config si vous utilisez DotNet 4.0

Checkout ce lien pour plus d'information.

0
répondu user193887 2016-11-10 17:26:25

vous pouvez utiliser JavaScript pour encoder les valeurs avant l'envoi au serveur, si cela vous convient.""

voir cette réponse

0
répondu Peter Kerr 2017-05-23 12:34:23