2012-02-03 25 views
24

Mam ten problem. Próbowałem wszystkiego. ValidateRequest = „false” .. i dekodowania i kodowania html .. itp itd ..Potencjalnie niebezpieczna wartość Request.Form została wykryta przez klienta

Co potrzebne jest okno podręczne (tak im przy ModalPopupExtender) zaprezentować użytkownikowi, gdzie ludzie mogą wpisać ustawienia xml i kliknij przycisk ok/cancel, aby zamknąć popup i zapisać.

Jednak ja ciągle otrzymuję ten błąd „Potencjalnie niebezpieczne wartość Request.Form wykryto od klienta” ..

Oto mój kod testu poniżej (krótki przykład mojego scenariusza i błędów) ..

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

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

aby uruchomić kod ref .. Dodaj do AjaxControltoolkit.dll a następnie uruchomić i widać textarea jest wypełniona xml. Kliknij przycisk Anuluj, co spowoduje błąd. Czy ktoś może mi pomóc?

+2

Sprawdź to http: // stackoverflow.com/questions/2673850/validaterequest-false-doesnt-work-in-asp-net-4 – mikey

+0

możliwy duplikat [Potencjalnie niebezpieczna wartość Request.Form została wykryta przez klienta] (http://stackoverflow.com/questions/ 81991/a - potencjalnie niebezpieczna-wartość-żądania-wykryto-od-klienta) –

+0

Dzięki mikey :-) Udało się .. Dzięki nie mogę uwierzyć, że to było takie proste .. – user929153

Odpowiedz

47

Zastosowanie

<httpRuntime requestValidationMode="2.0" /> 

w Twojej web.config (zachowując wszelkie atrybuty, które już na tym elemencie, jeśli już istnieje). W przeciwnym razie ASP.NET4.0 ignoruje ValidateRequest.

I, oczywiście, należy upewnić się, że podejmuje niezbędne środki w celu ochrony przed prawdziwie niebezpiecznych wniosków, że teraz nie jest to robione dla Ciebie.

Edycja: świetnym sposobem na zrobienie tego jest stworzenie własnej klasy pochodnej od RequestValidator i używanie zachowania 4.0, ale z tą klasą, która sprawdza.

+0

Cześć Jon, jest jakikolwiek sposób na osiągnięcie tego bez zmiany pliku web.config. Przepraszamy za pytanie w niewłaściwym miejscu :) – MaxRecursion

+3

@AkshayKulkarni zmienić główną konfigurację .NET, aby zmienić domyślny web.config? Mogę sobie wyobrazić, że to zadziała, ale jeśli nie chcesz zmieniać pliku web.config, naprawdę nie chcesz tego zmieniać. Naprawdę, nie ma sensu mieć konfiguracji wysokiego poziomu do blokowania czegoś, co nie jest wymuszane na tym poziomie. Dlaczego po prostu nie zmieniasz pliku web.config? –

+0

+1 Właśnie tego szukałem! :) –

5

Cóż, ludzie mówią o Asp.net 4.0 tylko ... Chyba musimy zająć inne wersje też. Dziś miałem ten sam problem, kiedy zastąpiłem mojego edytora AjaxToolkit TinyMCE, a po odesłaniu znalazłem ten sam problem.

„Potencjalnie niebezpieczne wartość Request.Form wykryto od klienta” ..

Więc użyłem tej linii w moim webconfig i pracował dla mnie.

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

Powinien działać w Asp.net 2.0 do 3.5.

UPDATE: działa nawet do połowy .NET 4.5

UPDATE: Można także spróbować zweryfikować żądania na poziomie raczej całej strony internetowej. Chciałem tylko pozwolić czytelnikom wybrać najlepszy sposób. Dzięki DVD za wskazanie tego.

+3

użycie requestValidationMode = "2.0" i wyłączenie sprawdzania poprawności (ValidateRequest = "false") tylko na wymaganej stronie byłoby lepsze dla bezpieczeństwa, niż wyłączenie sprawdzania poprawności dla całej witryny. – dvdmn

+0

@dvdnhm, stary, pytanie brzmiało, jak naprawić błąd ... Nie ważne, czy jest to jedna strona, czy cała sieć. można to zrobić w taki czy inny sposób. – KMX

+0

@BradleyDotNET (slow_clap) – KMX

29

Oto możliwe rozwiązanie, które może ci pomóc. Dokonaj ustawień konfiguracyjnych po stronie serwera dla tego. Jeśli chcesz, aby element HTML był wprowadzany z wybranych stron w projekcie, niż ustawiłeś ten atrybut strony.

<%@ Page ValidateRequest="false" %> 

Ten ValidateRequest = "false" na każdej stronie. Jeśli chcesz na wszystkich stronach w projekcie, to dokonaj zmian w pliku Web.Config. Dodaj ten tag W dziale.

Jeśli używasz .NET 4.0 niż trzeba zrobić jeszcze jedną zmianę w pliku web.config. Dodaj ten tag W dziale.

<httpRuntime requestValidationMode="2.0" /> 

Oto konfiguracja nie zatwierdzić wniosek o wszystkich stronach w .NET 4.0

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

Oto pełna przykładów na ten temat. Click Here...

+0

Który plik Web.config? Ta dla aplikacji internetowej lub dla widoków? – NicVerAZ

0

Dostępne są 3 opcje usunięcia tego błędu.

  1. Set validateRequest="false" w dyrektywach stronie.
  2. Ustaw validateRequest="false" w pliku web.config.
  3. Ustaw requestValidationMode="2.0" w web.config jeśli używasz DotNet 4,0

kasę this link aby uzyskać więcej informacji.

0

"Potencjalnie niebezpieczne wartość Request.Form wykryto od klienta" ..

1) ustawić httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\" w web.config pliku

2) ustawionym validateRequest="false" na stronach bocznych znacznika w pliku web.config

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

I w obliczu tego samego problemu podczas wysyłania kilka szablonów e-mail ze strony aspx kodować za ....

Więc starałem się rozwiązać ten problem poprzez dodanie

<httpRuntime requestValidationMode="2.0" /> 

w moim internetowej config pod enter code here `ale to nie pomogło mi chyba putted

ValidateRequest="false" 

attrribute w dyrektywie widoku strony aspx.

1

Stworzyłem artykuł tabelaryczny z kolumnami articleId i article_content. Użyłem również edytora html do kolumny article_content. Kiedy próbowałem zapisać, otrzymałem ten sam błąd. Rozwiązanie zostało rozwiązane przez dodanie [AllowHtml] do właściwości article_content w klasie.

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

Nie zapomnij dołączyć przestrzeni nazw za pomocą System.Web.Mvc. Aby uzyskać więcej informacji: http://www.infinetsoft.com/Post/A-potentially-dangerous-Request-Form-value-was-detected-from-the-client/1246

0

Można użyć JavaScript do kodowania wartości przed wysłaniem do serwera, jeśli odpowiada Twoim potrzebom

zobaczyć this answer