如何对字符串应用HTML编码在web应用程序中防止脚本注入

来源:互联网 发布:淘宝老板跑路 编辑:程序博客网 时间:2024/06/05 13:23

大多数脚本利用发生在用户可以将可执行代码插入你的程序时,默认情况下,Asp.Net提供验证,只要窗体发送包含HTML,该验证都会引发错误。例如: string str = this.TextBox1.Text.Trim(); string str1 = Server.HtmlEncode(str); 当你输入This is 运行后,结果如下: “/”应用程序中的服务器错误。 从客户端(TextBox1="This is ")中检测到有潜在危险的 Request.Form 值。 说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示危及应用程序安全的尝试,如跨站点的脚本攻击。通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。 异常详细信息: System.Web.HttpRequestValidationException: 从客户端(TextBox1="This is ")中检测到有潜在危险的 Request.Form 值。我们可以使用下列方法防止脚本利用: 1、 对窗体变量、查询字符串变量和cookie值执行参数验证。该验证应包括两种类型的验证;可以将变量转换为所需要的类型的验证,以及所需范围或者格式的验证。例如使用Int32.TryParse方法来检查应为整数的窗体发送的变量,以及验证该变量是否确实为整数。而且,还应该检查得到的整数,以验证该值是否在所需要的范围之内。 2、 将值写回响应时,向字符串输出应用HTML编码。这有助于确保用户提供的所有字符串输入将以静态文本形式呈现在浏览器中,而不是呈现为可执行的脚本代码或已经解释的HTML元素。向字符串应用HTML编码显示字符串之前,调用HtmlEncode方法,html元素会转换为浏览器将显示的字符串表示形式。例如:Label1.Text= Server.Encode(This.TextBox1.Text); 只有通过添加@page属性ValidateRequest=“false”在页中禁用请求验证时,此实例才起作用,但是,我们不要在成品应用程序中禁用请求验证。