web-dev-qa-db-fra.com

Une valeur Request.Form potentiellement dangereuse a été détectée par le client

J'ai ce problème. J'ai tout essayé. ValidateRequest = "false" .. et décodage et encodage html .. etc. etc ..

Ce dont j'ai besoin est une boîte contextuelle (donc j'utilise ModalPopupExtender) pour présenter à un utilisateur où les gens peuvent taper les paramètres xml et cliquer sur le bouton ok/cancel pour fermer la fenêtre contextuelle et enregistrer.

Cependant, je continue à obtenir cette erreur "Une valeur Request.Form potentiellement dangereuse a été détectée par le client" ..

Voici mon code de test ci-dessous (exemple rapide de mon scénario et 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 exécuter le code .. Ajoutez ref à AjaxControltoolkit.dll, puis exécutez et vous verrez la zone de texte remplie avec xml. Cliquez sur le bouton Annuler et cela provoque l'erreur. S'il vous plaît, quelqu'un peut-il m'aider?

25
user929153

Utilisation

<httpRuntime requestValidationMode="2.0" />

dans votre web.config (en conservant 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 véritablement dangereuses, maintenant que ce n'est pas fait pour vous.

Edit: Un excellent moyen de le faire est de créer votre propre classe dérivée de RequestValidator, et d'utiliser le comportement 4.0, mais avec cela comme classe qui effectue la vérification.

50
Jon Hanna

Voici une solution possible qui pourrait vous aider. Définissez le paramètre de configuration côté serveur pour cela. Si vous souhaitez autoriser l'élément HTML comme entrée à partir des pages sélectionnées de votre projet, 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, apportez des modifications dans le fichier Web.Config. Ajoutez cette balise dans la section.

Si vous utilisez .Net 4.0, vous devez apporter une modification supplémentaire au fichier Web.Config. Ajoutez cette balise dans la section.

<httpRuntime requestValidationMode="2.0" />

Voici la configuration pour ne pas valider la demande 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 à ce sujet. Cliquez ici ...

29
Jayesh Sorathia

Eh bien, les gens ne parlent que d'Asp.net 4.0 ... Je suppose que nous devons également aborder d'autres versions. Aujourd'hui, j'ai eu le même problème lorsque j'ai remplacé mon éditeur AjaxToolkit par TinyMCE et avec la publication j'ai trouvé le même problème.

"Une valeur Request.Form potentiellement dangereuse a été détectée par le client" ..

J'ai donc utilisé cette ligne dans ma configuration Web et cela a fonctionné pour moi.

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

Il devrait fonctionner sur Asp.net 2.0 à 3.5.

MISE À JOUR: Fonctionne même jusqu'à .net 4.5

PDATE: Vous pouvez également essayer de valider la demande au niveau de la page plutôt que sur l'ensemble du site Web. Je voulais juste laisser les lecteurs choisir la meilleure façon. Merci DVD d'avoir signalé cela.

5
KMX

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

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

N'oubliez pas d'inclure l'espace de noms à l'aide de System.Web.Mvc. Pour plus de détails: http://www.infinetsoft.com/Post/A-potially-dangerous-Request-Form-value-was-detected-from-the-client/1246

1
Mohamed Rasik

Vous pouvez utiliser JavaScript pour encoder les valeurs avant de les envoyer au serveur, si cela convient à vos besoins

voir cette réponse

0
Peter Kerr

Il existe 3 options pour supprimer cette erreur.

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

Commander ce lien pour plus d'informations.

0
user193887

J'ai rencontré ce même problème lors de l'envoi de modèles d'e-mails de la page aspx au code derrière ....

J'ai donc 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

ValidateRequest="false"

attrribute dans la directive page de la page aspx.

0
Tapan kumar

"Une valeur Request.Form potentiellement dangereuse a été détectée par le client" ..

1 jeu httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\" dans web.config fichier

2) définissez validateRequest="false" dans la balise des pages latérales du fichier web.config

<system.web>
    <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"/>
 <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
<system.web>
0
shrikant.Shukla