c# asp.mvc 從客戶端(...)中檢測到有潛在危險的 Request.Form 值

錯誤提示

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);
}

以上文章鏈接:https://www.cnblogs.com/webapi/p/5669065.html


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章