欢迎光临
我们一直在努力

在 Web 应用程序中防止脚本利用-.NET教程,Web Service开发

建站超值云服务器,限时71元/月

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

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

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

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

应用 html 编码

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

应用 html 编码

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

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

    注意   只有通过向 asp”>@ 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_error 或 application_error 处理程序捕捉此错误。有关详细信息,请参见asp”>显示安全的错误信息。

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

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

筛选 html 元素

  1. 通过将属性 validaterequest=”false” 添加到 asp”>@ page 指令中禁用请求验证。

    安全说明   决不要禁用自动请求验证而不添加您自己的检查或筛选器。

  2. 使用 asp”>htmlencode 方法对字符串进行编码。
  3. 调用 asp”>string.replace 方法,将要接受的已编码 html 标记转换回它们的 html 形式。

    提示   如果您熟悉正则表达式,则可以使用一个正则表达式来高效地执行筛选。有关详细信息,请参见 asp”>.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;
        }
赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在 Web 应用程序中防止脚本利用-.NET教程,Web Service开发
分享到: 更多 (0)