2013-01-05 36 views
5

當使用JQuery的$ .Ajax(..)將包含標記的JSON對象發佈到MVC操作方法時,我驚訝地發現內容沒有被ASP.Net的請求拒絕驗證。拒絕Ajax基於JSON的帖子與html

是否有請求驗證不適用於JSON帖子的原因?

如下定義,標記不被服務器拒絕......

$.ajax({ 
     url: '/Controller/Action', 
     data: JSON.stringify({data:data}), 
     type: "POST", 
     dataType: "json", 
     contentType: "application/json", 
     }); 

好像它綁類型JSON的帖子

我使用.NET 4.0 MVC 3.0

我正在創建將註釋保存到數據庫的功能。看起來像標記/腳本可以通過請求驗證安全問題...

我發佈JSON對象與各種屬性(例如commentText) 由於某種原因,它不拒絕我的帖子,如果它包含標記<div></div>

在這裏發現了一篇文章,似乎可以解釋的行爲:

http://weblogs.asp.net/imranbaloch/archive/2011/05/23/security-issue-in-asp-net-mvc3-jsonvalueproviderfactory.aspx

+0

你能告訴你正在使用哪個版本的ASP.NET線索?因爲請求驗證已在4.0中更改。 – Venemo

+0

已更新的問題。我正在使用.Net 4.0 – TGH

回答

3
+0

這不是一個答案,只是對事實的觀察和對緩解的建議。 application/json不受ASP.NET RequestValidation約束的問題未得到解答。 –

+0

@Andreas,你的評論絕對不會讓我更接近答案。保存你的治安並提出一些有用的建議。 – Brian

+0

嗨@Brian,我的意圖是讓TGH再次提出這個問題,因爲我對實際答案感興趣。我意識到我可以更好地表達這種意圖(並指示TGH)。對不起聽起來很嚴肅的警察,我不願意遇到那種SO用戶。 –

1

我不知道你傳給服務器的數據究竟是如何的模樣,但現在我認爲這只是一個簡單的字符串值「XYZ」。在這種情況下,服務器得到以下POST數據:

{「數據」:「測試」}

這是完全正常的,並不表示通過ASP.NET識別潛在的線程。

PS:如果你正在使用其他值數據的整個故事可能是不同的...用數據詮釋型號

+0

是的,它是一個包含smarkup的JSON對象,如

TGH

0

請求驗證工作。您可以在模型中啓用和禁用HTML化妝輸入。你可以使用[AllowHtml]在你的模型中做到這一點。之後,如果用戶在任何普通字段中輸入HTML,則可以使用Model.IsValid屬性檢查錯誤。