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?
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.
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...
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.
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
"potentiellement dangereuse Demande.La valeur du formulaire a été détectée par le client"..
1) définir httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="<,>,\"
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="<,>,\"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
<system.web>
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.
il y a 3 options pour supprimer cette erreur.
- Set
validateRequest="false"
dans la page de directives. - Set
validateRequest="false"
dans le web.fichier de configuration. - Set
requestValidationMode="2.0"
dans le web.config si vous utilisez DotNet 4.0
Checkout ce lien pour plus d'information.
vous pouvez utiliser JavaScript pour encoder les valeurs avant l'envoi au serveur, si cela vous convient.""
voir cette réponse