You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何允许文本框输入HTML及特殊字符?解决ASP.NET危险请求报错

解决ASP.NET中文本框允许HTML/特殊字符的请求验证报错问题

你遇到的这两个报错本质是同一个机制在起作用——ASP.NET内置的请求验证功能会默认拦截包含HTML标记、脚本类的输入,目的是防范跨站脚本攻击(XSS)。但如果你的业务场景确实需要允许这类合法输入,可以通过以下几种方式针对性解决:

1. 单个页面禁用请求验证(适合局部需求)

如果只有某一个页面需要支持HTML输入,直接在该页面的Page指令里添加ValidateRequest="false":

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="YourTargetPage.aspx.cs" Inherits="YourProjectNamespace.YourTargetPage" ValidateRequest="false" %>

注意:如果你的项目基于.NET 4.0及以上版本,还需要在web.config的<system.web>节点下补充配置,降低验证的严格级别:

<system.web>
  <httpRuntime requestValidationMode="2.0" />
</system.web>

2. 针对特定字段/控件放行(更安全,推荐)

不建议盲目全局或整页禁用验证,最好只给需要的字段开权限:

  • ASP.NET MVC场景:在模型类的目标字段上添加[AllowHtml]特性,提交该字段时会自动跳过请求验证:
public class PostModel
{
    // 其他常规字段...
    [AllowHtml]
    public string RichContent { get; set; } // 这个字段允许HTML输入
}
  • ASP.NET Web Forms场景:在后台接收数据时,直接获取未经过验证的请求值:
string userInput = Request.Unvalidated.Form["YourTextBoxID"];

3. 全局禁用请求验证(不推荐,风险高)

如果整个站点都需要允许HTML输入(非常不建议,会大幅提升XSS攻击风险),可以在web.config里配置:

<system.web>
  <pages validateRequest="false" />
  <httpRuntime requestValidationMode="2.0" />
</system.web>

重要安全提醒

即使开启了HTML输入权限,也一定要做好防护:

  • 如果输入内容不需要直接显示HTML,存储或输出时用HttpUtility.HtmlEncode()转义特殊字符;
  • 如果需要显示HTML,务必对内容进行恶意脚本清理(比如使用专业的XSS防护库),只保留安全的HTML标签,避免真正的攻击风险。

内容的提问来源于stack exchange,提问作者Sandeep Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:34:38