ASP.NET 请求验证功能可以为我们自动辨别来自客户端提交的数据,避免站点受到 XSS 的攻击。但是在一些特殊情况下,比如我们使用富文本编辑器让用户输入一篇新闻,新闻内容包括文字,图片等,还有排版格式等,当客户端将文本内容提交给服务器时,服务器如果辨识出文本中包含有一些不被允许的特殊字符或者标签,将阻止内容的提交。但是这部分内容是用户的“合法输入内容”,这时候的请求验证势必是多余的。所以为了应对这种问题,我们可以采用以下处理方式。
基于 .Net Framework 2.0 WebForm 的网站
在 aspx 页面顶部添加一段代码:ValidateRequest="false"
1 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo.aspx.cs" Inherits="MainPage.Demo" ValidateRequest="false" %> |
基于 .Net Framework 4 WebForm 的网站
和基于 .Net Framework 2.0 WebForm 的网站一样,在 aspx 网页顶部添加代码:
ValidateRequest="false"
。修改 web.config 配置文件,添加这段代码:
<httpRuntime requestValidationMode="2.0" />
1
2
3<system.web>
<httpRuntime requestValidationMode = "2.0" />
</system.web>
基于 ASP.NET MVC 的网站
如果需要全局取消验证(不安全),修改根目录 web.config 文件,如果只是局部取消验证,修改需要取消验证的目录就近的
web.config
文件1
2
3<system.web>
<pages validateRequest="false" ></pages>
</system.web>页面对应的 Action 方法添加
[ValidateInput(false)]
属性1
2
3
4
5
6[ ]
[ ]
public ActionResult Edit( FormCollection form)
{
//CODE
}MVC 页面使用
Html.Raw()
方法输出带 HTML 页面。
使用 HtmlEncode, HtmlDecode编码和解码
发送端使用 Server.HtmlEncode(string)
方法,对字符串进行编码,接收端使用 Server.HtmlDecode
解码。
1 | protected void Page_Load(object sender, EventArgs e) |