中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > .NET > ASP.NET
在 Web 应用程序中防止脚本利用
作者:佚名 时间:2005-06-08 14:40 出处:互连网 责编:chinaitpower
              摘要:暂无

大多数脚本利用发生在用户可以将可执行代码(脚本)插入您的应用程序时。默认情况下,ASP.NET 提供请求验证。不管窗体发送包含什么样的 HTML,该验证都会引发错误。

您可以使用下列方法防止脚本利用:

  • 在接受或显示字符串之前,将 HTML 编码应用于它们,以便字符串不包括任何可执行元素。
  • 如果您的应用程序需要接受某些 HTML,则禁用请求验证并创建您自己的 HTML 筛选器。

本主题中的过程说明如何执行这些任务。

应用 HTML 编码

HTML 编码使用 HTML 保留字符转换 HTML 元素,以便显示它们而不是执行它们。

应用 HTML 编码

  • 在显示字符串之前,调用 Server 对象的 HtmlEncode 方法。HTML 元素会转换为浏览器将显示(而不解释为 HTML)的字符串表示形式。

    以下示例说明 HTML 编码。在一个实例中,在显示用户输入之前对其进行编码。在第二个实例中,在显示数据库中的数据之前对其进行编码。

    注意   只有通过向 @ Page 指令中添加 alidateRequest="false" 来在页中禁用请求验证时,此示例才将起作用。决不禁用请求验证而不添加您自己的检查或筛选器。
    ' Visual Basic
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles Button1.Click
        Label1.Text = Server.HtmlEncode(TextBox1.Text)
        Label2.Text = _
        Server.HtmlEncode(dsCustomers.Customers(0).CompanyName)
        End Sub
        // C#
        private void Button1_Click(object sender, System.EventArgs e)
        {
        Label1.Text = Server.HtmlEncode(TextBox1.Text);
        Label2.Text =
        Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
        }

筛选 HTML 元素

默认情况下,Web 窗体页检测发送到服务器的信息中的任何 HTML 元素和保留字符。这样,将防止用户试图将脚本嵌入您的应用程序。当页检测到 HTML 时,它会引发一个错误。您可以使用 Page_ErrorApplication_Error 处理程序捕捉此错误。有关详细信息,请参见显示安全的错误信息

但是,如果您的应用程序需要接受某些 HTML 元素,可关闭请求验证,并创建一个只允许使用要接受的 HTML 元素的筛选器。

注意   不要创建试图只筛选出不可接受元素的筛选器,因为预料每个可能的错误输入十分困难。相反,如果您创建筛选器,则创建一个定义可接受输入的筛选器。

筛选 HTML 元素

  1. 通过将属性 ValidateRequest="false" 添加到 @ Page 指令中禁用请求验证。
    安全说明   决不要禁用自动请求验证而不添加您自己的检查或筛选器。
  2. 使用 HtmlEncode 方法对字符串进行编码。
  3. 调用 String.Replace 方法,将要接受的已编码 HTML 标记转换回它们的 HTML 形式。
    提示   如果您熟悉正则表达式,则可以使用一个正则表达式来高效地执行筛选。有关详细信息,请参见 .NET Framework 正则表达式

    以下示例说明一个简单的筛选器,它接受加粗元素和带下划线的元素(<b>、</b>、<u>、</u>)。在显示所有其他用户输入之前都对其进行编码。

    安全说明   许多 HTML 标记都允许在其属性中使用脚本。例如,标记 <img src="javascript:alert('hi')"> 是合法的。如果您希望接受比简单的格式设置标记更复杂的 HTML 标记,则必须确保恶意用户无法假借允许的 HTML 标记将脚本传递到您的应用程序。
    ' Visual Basic
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim userinput As String = TextBox1.Text
        userinput = Server.HtmlEncode(userinput)
        ' Accepts <b>, </b>, <u>, </u>, case-insensitive
        userinput = userinput.Replace("&lt;b&gt;", "<b>")
        userinput = userinput.Replace("&lt;/b&gt;", "</b>")
        userinput = userinput.Replace("&lt;B&gt;", "<B>")
        userinput = userinput.Replace("&lt;/B&gt;", "</B>")
        userinput = userinput.Replace("&lt;u&gt;", "<u>")
        userinput = userinput.Replace("&lt;/u&gt;", "</u>")
        userinput = userinput.Replace("&lt;U&gt;", "<U>")
        userinput = userinput.Replace("&lt;/U&gt;", "</U>")
        Label1.Text = userinput
        End Sub
        // C#
        private void Button1_Click(object sender, System.EventArgs e)
        {
        String userinput = TextBox1.Text;
        userinput = Server.HtmlEncode(userinput);
        // Accepts <b>, </b>, <u>, </u>, case-insensitive
        userinput = userinput.Replace("&lt;b&gt;", "<b>");
        userinput = userinput.Replace("&lt;/b&gt;", "</b>");
        userinput = userinput.Replace("&lt;B&gt;", "<B>");
        userinput = userinput.Replace("&lt;/B&gt;", "</B>");
        userinput = userinput.Replace("&lt;u&gt;", "<u>");
        userinput = userinput.Replace("&lt;/u&gt;", "</u>");
        userinput = userinput.Replace("&lt;U&gt;", "<U>");
        userinput = userinput.Replace("&lt;/U&gt;", "</U>");
        Label1.Text = userinput;
        }
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有