錯誤提示
2020-06-13 18:55:48,098 [19] ERROR www.gerenwaibao.com.Common.LogHelper -
異常消息:從客戶端(Detail="<p>
內容描述
</p>
<p>
...")中檢測到有潛在危險的 Request.Form 值。
幫助連接:
異常編碼:-2147467259
錯誤實例:
錯誤對象:System.Web
堆棧信息: 在 System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
在 System.Web.HttpRequest.<>c__DisplayClass280_0.<ValidateHttpValueCollection>b__0(String key, String value)
在 System.Web.HttpValueCollection.EnsureKeyValidated(String key)
在 System.Web.HttpValueCollection.Get(String name)
在 System.Web.HttpRequest.get_Item(String key)
在 System.Web.HttpRequestWrapper.get_Item(String key)
在 HaoSiJiaWeb.Areas.CPLVFXAdmin.Controllers.ProductController.ProductAdd() 位置 D:\1-2020\線上零售平臺\Web源碼\haosijia\HaoSiJiaWeb\Areas\CPLVFXAdmin\Controllers\ProductController.cs:行號 382\r\n
我之前的方法是這樣的
[HttpPost]
[ValidateInput(false)]//取消驗證
public JsonResult ProductAdd()
{
product.Detail = Request["Detail"];
}
修改後的方法是這樣的
[HttpPost]
[ValidateInput(false)]//取消驗證
public JsonResult ProductAdd(FormCollection forms)
{
product.Detail = forms["Detail"];
}
重點講解:
[HttpPost] //只接受Post提交
[ValidateInput(false)]//取消驗證
public JsonResult ProductAdd(FormCollection forms)
{
product.Detail = forms["Detail"];
}
第一篇
這個對於低版本的很有用,只是對我遇到的問題無效
Asp.net頁面 在頭部的Page中加入ValidateRequest="false"就行了
1,在出現該錯誤的頁面頭部的page中加入ValidateRequest="false",那麼該頁面的任何一次Post提交都不會再驗證提交內容的安全性。
如:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Manage/ViewMasterPageEdit.Master" Inherits="System.Web.Mvc.ViewPage<MvcWebPhoto.Models.Entities.Article >"
ValidateRequest="false" % >
2,在web.config中的pages節中配置validateRequest="false",如:
<system.web >
<pages validateRequest="false" ></pages >
</system.web >
但這樣,整個項目中的所有Form請求都不再驗證提交內容的安全性,極不提倡這種做法。
關於該問題的安全的解決方案可以參:
從客戶端中檢測到有潛在危險的Request.Form值的詳細解決方案
3,如果你使用的是.Net 3.5,MVC 2.0及更高的版本,那麼可以在處理Post方法的Action添加一個特性:[ValidateInput(false)],這樣處理就更加有針對性,提高頁面的安全性。
如:
[HttpPost]
[ValidateInput(false)]
public ActionResult CatalogEdit(Catalog model)
{
return View();
}
重要:
如果你使用的是MVC 3.0,那麼你會發現做了以上的設置後還是無效。這是因爲你還需要在web.config中做以下設置:
<system.web >
<httpRuntime requestValidationMode="2.0" / >
</system.web >
(唉~ 非常非常的麻煩啊)
注意:在MVC項目中,Views文件夾下與主項目下,都會有一個web.config文件。Views下的web.config文件只對Views文件夾下面的文件有效。如果你要處理的頁面不在Views下面,那麼<httpRuntime requestValidationMode="2.0" / >一定要設置在主項目下的web.config中才有用。
(唉~ 我也是因爲這個原因,才弄了一個上午才成功)
以上文章連接:https://blog.csdn.net/weixin_34378045/article/details/85571736
第二篇
這個解決了,我的問題
從客戶端(...)中檢測到有潛在危險的 Request.Form 值。 說明: ASP.NET 在請求中檢測到包含潛在危險的數據,因爲它可能包括 HTML 標記或腳本。該數據可能表示存在危及應用程序安全的嘗試,如跨站點腳本攻擊。如果此類型的輸入適用於您的應用程序,則可包括明確允許的網頁中的代碼。有關詳細信息,請參閱 http://go.microsoft.com/fwlink/?LinkID=212874。
以前在使用aspx頁面時可通過在 Page 指令或 配置節中設置 validateRequest="false" 禁用請求驗證。
但在MVC(Razor)中使用無效。搜索得知,只需要在頁面所請求的Action上加入 ValidateInput(false)即可。
如:
[ValidateInput(false)]
public ActionResult Add(){
.............
}
實際使用
[HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Add(news vmodel,FormCollection forms)
{
newsBLL bll = new newsBLL();
news model = new news();
model.cons = forms["editHtml"];
model = bll.Add(model);
if (model.ID > 0)
{
return RedirectToAction("list");
}
ViewData["mess"] = "添加失敗";
return View(vmodel);
}