2012-02-03 58 views
24

我遇到此問題。我已經嘗試了一切。 ValidateRequest =「false」..和解碼和編碼的HTML ..等等等。從客戶端檢測到潛在危險的Request.Form值

我需要的是一個彈出框(即時通訊使用ModalPopupExtender)呈現給用戶,用戶可以輸入xml設置,然後單擊確定/取消按鈕關閉彈出並保存。

但是我不斷收到此錯誤「從客戶端檢測到有潛在危險的Request.Form值」 ..

這裏是我下面的測試代碼(我的情況和錯誤的簡單的例子)..

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

代碼背後:

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

運行的代碼。增加裁判AjaxControltoolkit.dll,然後運行,你會看到的文字區域被填充了XML。點擊取消按鈕,這會導致錯誤。請任何人都可以幫我嗎?

+2

退房此http://計算器。com/questions/2673850/validaterequest-false-doesnt-work-in-asp-net-4 – mikey 2012-02-03 14:33:09

+0

可能的重複[從客戶端檢測到潛在危險的Request.Form值](http://stackoverflow.com/questions/ 81991 /一個潛在的危險請求形式價值被檢測到從客戶端) – 2012-02-03 14:34:18

+0

感謝mikey :-)它的工作..感謝不能相信這是簡單的.. – user929153 2012-02-03 14:38:32

回答

47

使用

<httpRuntime requestValidationMode="2.0" /> 
在你的web.config

(保持任何屬性,你已經有一個元素,如果它已經存在)。否則,ASP.NET4.0將忽略ValidateRequest

而且,當然,確保您採取必要的措施來防範真正危險的請求,因爲它不會爲您完成。

編輯:這樣做的好方法是創建自己的類,從RequestValidator派生,並使用4.0行爲,但將其作爲執行檢查的類。

+0

嗨喬恩有沒有什麼辦法來實現這一點,而無需更改web.config文件。對不起,在錯誤的地方問問題:) – MaxRecursion 2012-08-20 14:56:13

+3

@AkshayKulkarni更改主.NET配置以更改默認web.config?我想可以,但如果你不想改變web.config,你真的不想改變這一點。實際上,使用高級配置來阻止在該級別未實施的內容並沒有多大意義。你爲什麼不只是改變web.config? – 2012-08-20 15:58:07

+0

+1正是我在找的! :) – 2014-06-13 02:07:02

5

那麼,人們只談論Asp.net 4.0 ......我想我們也需要解決其他版本。今天,當我用TinyMCE替換AjaxToolkit編輯器時,我遇到了同樣的問題,並且回發時發現了同樣的問題。

「從客戶端檢測到有潛在危險的Request.Form值」 ..

所以我用我的webconfig裏這條線上,它爲我工作。

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

它應該跨越Asp.net 2.0到3.5。

UPDATE:甚至高達工作.NET 4.5

UPDATE:您也可以嘗試驗證的頁面級別,而整個網站的請求。只是想讓讀者選擇最好的方法。感謝DVD指出了這一點。

+3

使用requestValidationMode =「2.0」並且僅在需要的頁面上關閉驗證(ValidateRequest =「false」)會更有利於安全性,而不是關閉整個站點的驗證。 – dvdmn 2014-02-12 13:54:05

+0

@dvdnhm,花花公子,問題是如何獲得固定的錯誤......無論是一頁還是整個網頁。它可以以某種方式完成。 – KMX 2014-02-16 21:38:47

+0

@BradleyDotNET(slow_clap) – KMX 2014-10-24 20:53:18

29

這裏有可能的解決方案,可以幫助你。 爲此進行服務器端配置設置。 如果您要允許HTML元素作爲您項目中選定頁面的輸入,而不是您設置此頁面屬性。

<%@ Page ValidateRequest="false" %> 

這個ValidateRequest =「false」在每一頁上。 如果您希望在您的項目中的所有頁面中進行更改,請在Web.Config文件中進行更改。 添加此標籤於部分。

如果您使用的是.NET 4.0比你不得不在Web.Config文件多了一個變化。 添加此標籤於部分。

<httpRuntime requestValidationMode="2.0" /> 

下面是配置在.NET 4.0中

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

不驗證爲所有頁面請求下面是對這個完整的例子。 Click Here...

+0

哪個Web.config?一個用於Web應用程序還是一個用於Views? – NicVerAZ 2016-11-21 18:01:58

0

有3個選項可以刪除此錯誤。

  1. 在頁指令中設置validateRequest="false"
  2. 在web.config文件中設置validateRequest="false"
  3. 如果您正在使用DOTNET的4.0

結帳this link更多信息設置在web.config中requestValidationMode="2.0"

0

「從客戶端檢測到有潛在危險的Request.Form值」 ..

1)設置在httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"文件web.config

2)設置在validateRequest="false"端頁面標籤在web.config文件

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

我而來自aspx頁面發送一些電子郵件模板的代碼背後面臨同樣的問題....

所以,我想通過在enter code here`在我的web配置添加

<httpRuntime requestValidationMode="2.0" /> 

來解決這一點,但除非我在aspx頁面的頁面指令推杆

ValidateRequest="false" 

attrribute未幫助我。

1

我用列articleId和article_content創建了一個表格文章。我還用article_content列的html編輯器。當我試圖保存時,我得到了同樣的錯誤。它通過將[AllowHtml]添加到類中的article_content屬性來解決。

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

不要忘記使用System.Web.Mvc包含名稱空間。有關詳細信息:http://www.infinetsoft.com/Post/A-potentially-dangerous-Request-Form-value-was-detected-from-the-client/1246

0

您可以使用JavaScript發送到服務器之前編碼值,如果適合您的需要

看到this answer

相關問題