ASP.NET提交含#字符的ASCX控件值触发请求验证异常求助
解决ASP.NET中含特殊字符的输入触发HttpRequestValidationException异常
当通过ASCX控件传递类似abc#abc这类带特殊字符的值时,ASP.NET会抛出System.Web.HttpRequestValidationException,提示检测到潜在危险的Request.Form值,误将合法输入判定为疑似跨站脚本攻击。以下是几种合法允许这类输入的解决办法:
单个页面/控件级禁用验证
这是最推荐的方式,只针对需要的页面或控件关闭请求验证:- 对于Web Forms页面,在
@Page指令中添加属性:<%@ Page Language="C#" ValidateRequest="false" %> - 对于ASCX用户控件,在
@Control指令中添加:<%@ Control Language="C#" ValidateRequest="false" %>
- 对于Web Forms页面,在
全局配置(谨慎使用)
如果你的整个应用都需要允许这类特殊字符输入,可以修改web.config,但会降低整体安全性,需确保所有输入都做了额外安全处理:<system.web> <pages validateRequest="false" /> </system.web>.NET 4.0+版本额外配置
如果你用的是.NET 4.0及以上版本,仅设置validateRequest="false"可能不生效,需要在web.config的<httpRuntime>节点补充配置:<system.web> <httpRuntime requestValidationMode="2.0" /> <pages validateRequest="false" /> </system.web>局部获取未验证值(更安全)
不想关闭验证的话,可以直接获取未经过验证的表单值,之后自行做安全校验:// 获取指定字段的未验证值 string hotelSmeValue = Request.Unvalidated.Form["HotelCtrl:_ctl62:_ctl0:XmlsplSummary:_ctl23:_ctl2:HotelSme"]; // 这里添加自定义安全检查逻辑,比如过滤恶意HTML/脚本
内容的提问来源于stack exchange,提问作者Deepak Sundkar
相关产品推荐
相关产品推荐

