百度編輯器ueditor經過ajax方式提交,不須要事先轉義字符的方法(異常:從客戶端(xxx)中檢測到有潛在危險的 Request.Form 值)

 

       最近項目中使用百度編輯神器ueditor,確實是很好用的一款編輯器。官網教程提供的與後端數據交互都是跟表單方式有關的,項目中使用的是ajax方式提交,所以出現了很多問題,如今記錄備忘下。 javascript

環境:.net4.0、mvc二、chrome瀏覽器 html

問題1:提交方式,經過javascript模擬表單數據對象提交,詳細瞭解能夠看如下鏈接: java

http://www.cnblogs.com/rubylouvre/archive/2011/04/26/2028827.html web

[javascript] view plaincopy ajax

  1. var xhr = new XMLHttpRequest();  
  2. var formData = new FormData();  
  3. formData.append("content", ue.getContent());  
  4. xhr.open('post', Core.host + '/test/test?id=' + id, true);  
  5. xhr.send(formData); 

問題2:服務端接收方式 chrome

[csharp] view plaincopy 後端

  1. [ValidateInput(false)]  
  2. public ActionResult test()  
  3. {  
  4.     var content = Request.Params["content"];  
  5. return Content(content);  

問題3:異常:從客戶端(xxx)中檢測到有潛在危險的 Request.Form 值 瀏覽器

打開web.config文件,配置以下: 安全

[csharp] view plaincopy ruby

  1. <system.web>   
  2.       <httpRuntime requestValidationMode="2.0"/>  
  3. </system.web> 

還有就是在Controller中Action方法上加一個[ValidateInput(false)]就成了。

如下是擴展閱讀內容,原文地址:http://www.cnblogs.com/losesea/archive/2012/05/20/2509359.html

先看以下 web.config 的代碼:

<system.web>
<compilation debug="true" targetFramework="4.0"/>
<httpRuntime requestValidationMode="2.0" />
<pages validateRequest="false"></pages>
</system.web>

validateRequest 這句咱們知道是關閉驗證,也就是說提交帶標籤,好比 <strong>粗體</strong> 這樣的值時,ASP.NET 不會報錯。

但在 4.0 中還多了一個 requestValidationMode,這是什麼意思呢?

requestValidationMode 有兩個值:

  • 2.0僅對網頁啓用請求驗證。是啓用仍是關閉取決於 validateRequest。
  • 4.0 默認值。任何 HTTP 請求都會啓用請求驗證,也就是說不光是網頁,還包括 Cookie 等。此時強制啓用,無論 validateRequest 爲什麼值。

因爲 requestValidationMode="4.0" 是強制啓用,因此咱們會發如今 .NET Framework 4.0 中僅靠設置 validateRequest 是關閉不了請求驗證的,還得將 requestValidationMode 設置爲 2.0。

ASP.NET中的請求驗證特性提供了某一等級的保護措施防止XSS攻擊,以前版本的ASP.NET的請求驗證是默認啓動的,可是他牢牢應用於ASP.NET頁面中(.aspx文件和.aspx.cs文件)。

而在ASP.NET4中,請求驗證默認對全部類型的請求啓動,由於它在BeginRequest被調用以前啓動,結果就是對全部資源的請求都要通過請求驗證,而不單單在.aspx文件和他們的類文件中,甚至包括web service和自定義的httphandler。一樣,在自定義httpmodules讀取http請求的時候,一樣要通過請求驗證。

上述緣由引起的最終結果就是在ASP.NET4中會引起請求錯誤,例如檢測到有潛在危險的Request.Form值等等,爲了解決這個問題,能夠經過將驗證模式設置爲ASP.NET以前的版本。具體步驟是在web.config中加入如下配置:

<httpRuntime requestValidationMode=」2.0″ />

設置了請求模式後,再設置

<system.web>
<pages validaterequest=」false」/>
</system.web>

MVC框架中,在控制方法前加入:

[ValidateInput(false)]屬性。

那麼就能夠禁止請求驗證了。可是這會引起安全問題,對安全問題的討論請看這裏:點擊這裏查看

另外還有一種方法就是實現本身的請求驗證類,首先須要在web.config中指定請求驗證類類型:

<httpRuntime requestValidationType=」Globals.CustomRequestValidation」/>

而後實現本身的請求驗證類,這個類必須從RequestValidator類中繼承,具體代碼以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Util;
namespace Globals
{
/// <summary>
/// Summary description for CustomRequestValidation
/// </summary>
public class CustomRequestValidation : RequestValidator
{
public CustomRequestValidation() { }
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, outint validationFailureIndex)
{
//block script tags
var idx = value.ToLower().IndexOf(「<script」);
if (idx > -1)
{
validationFailureIndex = idx;
return false;
}
else
{
validationFailureIndex = 0;
return true;
}
}
}
}

IsValidRequestString函數返回true則驗證經過,不然驗證失敗,還會出現文章開頭所說的錯誤消息。此請求驗證類當檢測到<script>標籤時就會出現錯誤,防止腳本注入攻擊等等。

相關文章
相關標籤/搜索