System.Web


.NET Framework 类库
HttpRequestValidationException 类

当从客户端收到作为请求数据一部分的潜在恶意输入字符串时引发的异常。无法继承此类。

命名空间:System.Web
程序集:System.Web(在 system.web.dll 中)

语法

Visual Basic(声明)
<SerializableAttribute> _
Public NotInheritable Class HttpRequestValidationException
    Inherits HttpException
Visual Basic(用法)
Dim instance As HttpRequestValidationException
C#
[SerializableAttribute] 
public sealed class HttpRequestValidationException : HttpException
C++
[SerializableAttribute] 
public ref class HttpRequestValidationException sealed : public HttpException
J#
/** @attribute SerializableAttribute() */ 
public final class HttpRequestValidationException extends HttpException
JScript
SerializableAttribute 
public final class HttpRequestValidationException extends HttpException
备注

在 Web 应用程序中,要阻止依赖于恶意输入字符串的黑客攻击,约束和验证用户输入是必不可少的。跨站点脚本攻击就是此类攻击的一个示例。其他类型的恶意数据或不需要的数据可以通过各种形式的输入在请求中传入。通过在应用程序中的较低级别限制允许通过的数据类型,就可以阻止不希望的事件,即使当使用代码的程序员没有恰当地使用合适的验证技术时也是如此。

当请求验证检测到潜在的恶意客户端输入时,会引发此异常来中止请求处理。请求中止能够指示危害您的应用程序安全的企图,例如跨站点脚本攻击。强烈建议让您的应用程序显式地检查与请求中止有关的所有输入。不过,您也可以通过将 @ Page 指令中的 validateRequest 属性设置为 false 来禁用请求验证,如下面的示例所示:

<%@ Page validateRequest="false" %>

要禁用应用程序的请求验证,必须修改应用程序的 Web.config 文件或创建一个 Web.config 文件,并将 pages 节的 validateRequest 属性设置为 false,如下面的示例所示:

<configuration> 
  <system.web> 
    <pages validateRequest="false" /> 
  </system.web> 
</configuration> 

要禁用服务器上所有应用程序的请求验证,可以对 Machine.config 文件作此修改。

Note注意

除了由 ASP.NET 执行的请求验证外,强烈建议您让应用程序显式检查其使用的所有输入。请求验证功能无法将所有的攻击都捕捉到,特别是无法捕捉那些专门针对应用程序逻辑而策划的攻击。

示例

下面的代码示例演示如何使用 HttpRequestValidationException 检查恶意用户输入。

Visual Basic
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Label1.Text = txt1.Text
    End Sub
</script>

<html  >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox id="txt1" Runat=server />
        <asp:Button ID="Button1" Runat="server" Text="Button" OnClick="Button1_Click" />
        <br /><br />You entered: <asp:Label ID="Label1" Runat="server" Text="Label" />.
    </div>
    </form>
</body>
</html>
C#
<%@ Page Language="C#" %>

<script runat="server">
    void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = txt1.Text;
    }
</script>

<html>
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox id="txt1" Runat=server />
        <asp:Button ID="Button1" Runat="server" Text="Button" OnClick="Button1_Click" />
        <br /><br />You entered: <asp:Label ID="Label1" Runat="server" Text="Label" />.
    </div>
    </form>
</body>
</html>
.NET Framework 安全性

继承层次结构

System.Object
   System.Exception
     System.SystemException
       System.Runtime.InteropServices.ExternalException
         System.Web.HttpException
          System.Web.HttpRequestValidationException
线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
平台

Windows 98、Windows 2000 SP4、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1
请参见

标记 :


Community Content

Eric_NIceUN
哪些字符会引发 HttpRequestValidationException

哪些字符会引发 HttpRequestValidationException?? 为什么“东奔西走</测试”也会引发这个异常?


Page view tracker