2012-02-03 12 views
24

Ho questo problema. Ho provato di tutto. ValidateRequest = "false" .. e decodifica e codifica html .. ecc.Un valore Request.Form potenzialmente pericoloso è stato rilevato dal client

Quello che mi serve è una finestra popup (quindi im usando ModalPopupExtender) da presentare a un utente dove le persone possono digitare le impostazioni xml e fare clic ok/annulla pulsante per chiudere il popup e salvare.

Tuttavia continuo a ottenere questo errore "Un valore potenzialmente pericoloso Request.Form è stato rilevato dal client" ..

Ecco il mio codice di prova di seguito (rapido esempio di mio scenario ed errori) ..

<%@ 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> 

codice Dietro:

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(); 
     } 
    } 
} 

per eseguire il codice .. Aggiungi ref per AjaxControltoolkit.dll e quindi eseguire e vedrete la textarea essere popolato con XML. Fare clic sul pulsante Annulla e questo provoca l'errore. Per favore qualcuno puo aiutarmi?

+2

Dai un'occhiata a questo http: // StackOverflow.it/questions/2673850/validaterequest-false-doesnt-work-in-asp-net-4 – mikey

+0

possibile duplicato di [Un valore Request.Form potenzialmente pericoloso è stato rilevato dal client] (http://stackoverflow.com/questions/ 81991/a-potenzialmente-pericoloso-richiesta-modulo-valore-è stato rilevato-dal-client) –

+0

Grazie mikey :-) Ha funzionato .. Grazie non posso credere che fosse così semplice .. – user929153

risposta

47

Usa

<httpRuntime requestValidationMode="2.0" /> 

nel web.config (mantenendo tutti gli attributi hai già su quell'elemento, se è già lì). ASP.NET4.0 ignora ValidateRequest in caso contrario.

E, naturalmente, assicuratevi di prendere le misure necessarie per proteggervi da richieste veramente pericolose, ora che non è stato fatto per voi.

Modifica: Un ottimo modo per fare ciò è creare la propria classe derivata da RequestValidator e utilizzare il comportamento 4.0, ma con quello come classe che esegue il controllo.

+0

Ciao Jon c'è un modo per ottenere questo risultato senza modificare il file web.config. Ci scusiamo per aver posto una domanda nel posto sbagliato :) – MaxRecursion

+3

@AkshayKulkarni cambia la configurazione principale di .NET per cambiare il web.config predefinito? Immagino che funzionerebbe, ma se non vuoi cambiare il web.config, davvero non vuoi cambiarlo. In realtà, non ha molto senso avere una configurazione di alto livello per bloccare qualcosa che non è applicato a quel livello. Perché non si cambia semplicemente web.config? –

+0

+1 Proprio quello che stavo cercando! :) –

5

Bene, la gente parla solo di Asp.net 4.0 ... Suppongo che dobbiamo anche affrontare altre versioni. Oggi ho avuto lo stesso problema quando ho sostituito il mio editor AjaxToolkit con TinyMCE e con il postback ho trovato lo stesso problema.

"Un valore potenzialmente pericoloso Request.Form è stato rilevato dal client" ..

così ho usato questa linea all'interno del mio WebConfig e ha funzionato per me.

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

Dovrebbe funzionare su Asp.net 2.0 a 3.5.

UPDATE: funziona anche fino .net 4.5

UPDATE: Potete anche provare a convalidare la richiesta a livello pagina piuttosto tutto il sito. Volevo solo permettere ai lettori di scegliere il modo migliore. Grazie a DVD per averlo indicato.

+3

utilizzando requestValidationMode = "2.0" e disattivando la convalida (ValidateRequest = "false") solo sulla pagina necessaria sarebbe meglio per la sicurezza, invece di disattivare la convalida per l'intero sito. – dvdmn

+0

@dvdnhm, amico, la domanda era come ottenere l'errore corretto ... Non importa se si tratta di una pagina o di un intero web. potrebbe essere fatto in un modo o nell'altro. – KMX

+0

@BradleyDotNET (slow_clap) – KMX

29

Qui sono possibili soluzioni che possono essere d'aiuto. Effettuare le impostazioni di configurazione lato server per questo. Se si desidera consentire l'elemento HTML come input dalle pagine selezionate nel progetto, si imposta questo attributo di pagina.

<%@ Page ValidateRequest="false" %> 

Questo ValidateRequest = "false" su ogni pagina. Se si desidera in tutte le pagine del progetto, apportare modifiche nel file Web.Config. Aggiungi questo tag nella sezione.

Se si utilizza Net 4.0 che si deve fare un altro cambiamento nel file web.config. Aggiungi questo tag nella sezione.

<httpRuntime requestValidationMode="2.0" /> 

Ecco configurazione per non convalidare le richieste di tutte le pagine in Net 4,0

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

Ecco piena esempio su questo. Click Here...

+0

Quale Web.config? Quello per l'app Web o quello per le Views? – NicVerAZ

0

Ci sono 3 opzioni per rimuovere questo errore.

  1. Impostare le direttive validateRequest="false" nella pagina.
  2. Impostare validateRequest="false" nel file web.config.
  3. Impostare requestValidationMode="2.0" nel web.config se si utilizza DotNet 4,0

Checkout this link per maggiori informazioni.

0

"Un valore potenzialmente pericoloso Request.Form è stato rilevato dal client" ..

1) Impostare httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\" in web.config file di

2) Impostare validateRequest="false" in tag pagine laterali nel file web.config

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

ho affrontato questo stesso problema durante l'invio di alcuni modelli di e-mail da pagina aspx al codice dietro ....

Così ho cercato di risolvere questo con l'aggiunta di

<httpRuntime requestValidationMode="2.0" /> 

nel mio web config sotto enter code here `ma che non mi ha aiutato a meno che io putted

ValidateRequest="false" 

attrribute nella direttiva di pagina della pagina aspx.

1

Ho creato un articolo di tabella con colonne articleId e article_content. Ho anche usato l'editor html per la colonna article_content. Quando ho provato a salvare ho avuto lo stesso errore. È stato risolto aggiungendo [AllowHtml] alla proprietà article_content nella classe.

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

Non dimenticare di includere lo spazio dei nomi utilizzando System.Web.Mvc. Per maggiori dettagli: http://www.infinetsoft.com/Post/A-potentially-dangerous-Request-Form-value-was-detected-from-the-client/1246

0

È possibile utilizzare JavaScript per codificare i valori prima di inviare al server, se che si adatta alle tue esigenze

vedere this answer

Problemi correlati