最近在用ASP.NET MVC 3,在通過TinyMCE HTML編輯器,向服務器端輸入HTML代碼時,收到了下面這個錯誤信息:
異常詳細信息: System.Web.HttpRequestValidationException: 從客戶端(test="<a>adfasdf</a>")中檢測到有潛在危險的 Request.Form 值。
很明顯,這是ASP.NET為了阻止跨站腳本攻擊所實現的防御措施,然而在我的情況下,我的確需要ASP.NET臨時關閉這個檢查機制,因為這個時候我需要保存原始的HTML文本。在網上搜了一下,發現很多人的解決方案有點粗暴,要麼是直接將整個站點的HTML跨站攻擊檢測機制禁止掉:
- 將web.config文件裡,添加上<httpRuntime requestValidationMode="2.0" />。
- 然後再<pages>節設置validateRequest="false" 禁用請求驗證。
安全一點的,也是把整個頁面的檢測機制禁止掉—即通過在webform頁面的Page指令禁用請求驗證,或在MVC的Controller上加上[ValidateInput(false)]屬性。下面這個razor語法的頁面就可以讓你重現這個問題:
代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample Page</title>
<script src="@Url.Content("~/Scripts/jquery-1.4.2.min.js")" type="text/javascript"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/tinymce/tiny_mce.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/tinymce/jquery.tinymce.js")"></script>
<script language="javascript" type="text/javascript">