2011-04-04 57 views
6

(ASP.NET 4.0 C#)validateRequest =「false」是行爲怪異的

我在我的網站configconfig中配置了<httpRuntime requestValidationMode="2.0" />。和 我有我的validateRequest="false"頁面目錄。

在一頁上,我從ckeditor(textarea)發送一些數據(html)到數據庫。工作正常。 在另一頁上,我使用數據庫中的數據填充ckeditor,然後更新它(發送回去),然後我得到着名的「從客戶端檢測到潛在危險的Request.Form值。」

讓我很困惑。唯一的區別是,在第二頁上,數據被動態地插入到textarea中,第一頁上的textarea在pageload上是空的。我在這裏錯過了什麼嗎?我很確定編碼/解碼並不意味着什麼,因爲在我甚至可以在後端開始搞亂它之前,框架會阻止它。

+0

您確定您在兩個頁面上都有validateRequest = false嗎?也許可以在web.config上移動它。 – Aristos 2011-04-04 20:59:23

+0

ValidateRequest是否區分大小寫? – IrishChieftain 2011-04-04 21:09:35

回答

1

好吧,我還沒有找到一個答案,爲什麼它表現它的方式。但是,我發現了一個非常簡單快捷的方法(+新的優點)。

即使世界誰提出一個.NET CKEditor的控制

http://cksource.com/forums/viewtopic.php?f=11&t=15882

有亞去的人。奇蹟般有效。沒有驗證錯誤是如此之多。

0

嘗試在頁指令中設置ValidateRequest爲false?一個更好的選擇可能是使用微軟反跨站點腳本庫:

http://msdn.microsoft.com/en-us/library/aa973813.aspx

類似的問題在這裏回答:

What's the difference between requestValidationMode 2.0 and 4.0

也有可能,要麼ASP.NET 4.0未安裝或應用程序池未設置爲在4.0下運行。

+0

我已經在頁面指令中有validateRequest爲false,如我的問題所述:)其他線程真的沒有幫助,但生病嘗試查看您發送給我的另一個鏈接。感謝您的回答:) – 2011-04-06 12:50:57

+0

檢查IIS中的應用程序池基本設置以查看它是否設置爲4.0。如果不是,這可能是問題所在。 – IrishChieftain 2011-04-06 13:45:31

+0

我只是通過VS10在虛擬服務器上運行它:) – 2011-04-07 17:49:59

0

ValidationRequest =「false」僅適用於以前版本框架中的.aspx文件。

在ASP.NET 4中,它在任何HTTP請求的BeginRequest階段之前啓用了所有請求。因此,請求驗證適用於所有ASP.NET資源(如Web服務調用和自定義HTTP處理程序)的請求。

要繞過這個新機制,必須創建自己的RequestValidator並將web.config更改爲使用此自定義驗證程序。

http://msdn.microsoft.com/en-us/library/system.web.util.requestvalidator.aspx

+0

啊哈,有趣的,我會研究它。顯然這個框架並沒有阻止我的數據被放到我的數據庫中,它只是顯示錯誤:S – 2011-04-07 17:53:06

+0

好吧,大衛,我讀過它了,好東西,但是你不是說msdn正在說的完全相反嗎?對我來說,它的聽起來像(閱讀你的鏈接後)我不必擔心驗證錯誤。我唯一擔心的是如果我想要驗證某些特定的內容,但是你不是說它會一直驗證 - 無論是什麼? – 2011-04-07 18:24:53

+0

反正,真的不要再浪費眼淚了,我想我會自己寫一個requestValidator,就像你說的那樣,這是一個關於msdn的好例子,謝謝你的時間伴侶 – 2011-04-07 18:34:03