日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ASP.NET請(qǐng)求驗(yàn)證功能可以給我提供應(yīng)用程序的安全保證,避免站點(diǎn)受到XSS的攻擊。但是在一些情況下,我們需要禁用這個(gè)功能,比如我們需要使用HtmlEditor來(lái)讓用戶輸入一些HTML文本,這時(shí)候ASP.NET 2.0允許我們可以通過(guò)在web.config設(shè)置validateRequest="false"。或者在MVC中,我們可以通過(guò)在Controller或者Action上設(shè)置[ValidateRequest(false)]這個(gè)特性來(lái)達(dá)到禁用的上的。但是在當(dāng)你把站點(diǎn)從舊版本升級(jí)到ASP.NET 4.0后,你會(huì)發(fā)現(xiàn),即使你這樣做,仍然會(huì)提示你這樣的一個(gè)異常“A potentially dangerous Request.Form value was detected from the client”。該如何來(lái)解決這個(gè)問(wèn)題呢?

在之前的ASP.NET版本中,請(qǐng)求驗(yàn)證是默認(rèn)啟用的,但是它只對(duì)頁(yè)面請(qǐng)求有效(請(qǐng)求.aspx頁(yè)面),并且也只是在頁(yè)面被請(qǐng)求時(shí)驗(yàn)證。但是在ASP.NET 4.0中,請(qǐng)求驗(yàn)證功能被提前到IHttpHandler.BeginRequest這個(gè)方法被請(qǐng)求之前,這也就意味著所有進(jìn)入ASP.NET請(qǐng)求通道的所有的HTTP請(qǐng)求都將會(huì)被進(jìn)行請(qǐng)求內(nèi)容合法性的驗(yàn)證,包括有的自定義HttpHandler,WebService請(qǐng)求,甚至于利用自定義Http Module進(jìn)行自定義請(qǐng)求處理程序。

請(qǐng)求驗(yàn)證處理被提前的后果就是導(dǎo)致我們?cè)陧?yè)面,或者Controller中設(shè)置ValidateRequest=false,將會(huì)失效,無(wú)法阻止程序不去驗(yàn)證請(qǐng)求的輸入內(nèi)容了。因?yàn)檫@樣做后,驗(yàn)證器無(wú)法得到請(qǐng)求的頁(yè)面是否禁用了驗(yàn)證請(qǐng)求,因?yàn)檫€沒有實(shí)例化HttpHandler。并且在ASP.NET4.0中,并沒有提供給我一個(gè)地方去禁用這個(gè)驗(yàn)證功能。但是出于兼容性的考慮,ASP.NET允許我們通過(guò)在web.config中配置使用ASP.NET 2.0的請(qǐng)求驗(yàn)證行為:<httpRuntime requestValidationMode=”2.0″ />。

完全禁用或不禁用請(qǐng)求驗(yàn)證功能,對(duì)程序員來(lái)說(shuō)都不是特別方便。出現(xiàn)安全性和程序可用性考慮,一個(gè)折中的方案可能是自己寫一個(gè)驗(yàn)證處理器,來(lái)過(guò)濾掉一些我們不希望出現(xiàn)的html標(biāo)簽,而不是一見到”<>” 就害怕。因?yàn)閄SS的一個(gè)很重要的標(biāo)簽是<script> ,那我們就可以通過(guò)寫一個(gè)自定義的驗(yàn)證來(lái)過(guò)濾<script>,當(dāng)看到用戶提交這個(gè)標(biāo)簽就才報(bào)告非法輸入,下面是一個(gè)示例源碼

以上段落可能會(huì)引起關(guān)于如何防止XSS攻擊的歧義,特此刪除。以下代碼僅用于演示開發(fā)人員如何編寫自定義的請(qǐng)求輸入驗(yàn)證器,根據(jù)自己需要決定允許請(qǐng)求哪些數(shù)據(jù):

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, out int validationFailureIndex)
{
//block script tags
var idx = value.ToLower().IndexOf(“<script”);
if (idx > -1)
{
validationFailureIndex = idx;
return false;
}
else
{
validationFailureIndex = 0;
return true;
}
}
}
}

此時(shí),我們?cè)趙eb.config中添加這個(gè)配置,讓系統(tǒng)使用我們的自定義驗(yàn)證器進(jìn)行驗(yàn)證:<httpRuntime requestValidationType=”Globals.CustomRequestValidation”/>。

關(guān)于這個(gè)問(wèn)題的相關(guān)資源:

http://jefferytay.wordpress.com/2010/04/15/asp-net-4-breaking-changes-1-requestvalidationmode-cause-validaterequestfalse-to-fail/

轉(zhuǎn)載于:https://www.cnblogs.com/hjf1223/archive/2010/04/17/asp_net_4_breaking_change_validatereqeust.html

總結(jié)

以上是生活随笔為你收集整理的ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。