asp.net 过滤html代码

来源:百度知道 编辑:UC知道 时间:2024/06/05 18:05:49
<asp:TextBox ID="TextBox1" runat="server" Width="170px" MaxLength="12" Text='<%# Server.HtmlEncode(Request["TextBox1"])%>'></asp:TextBox>

以上表达式有何问题?运行后在textbox1中打"<html>"点提交后还是会报错.

默认是禁止包含有HTML标签的POST请求,设置 ValidateRequest="false" 就可以了

比如:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits=YourNameSpace.YourClassName" ValidateRequest="false" %>

禁止 validateRequest 并不好,有一部分是真的需要用户输入"<>"之类的字符。这就不必说了。还有一部分其实并不是用户允许输入那些容易引起XSS的字符,而是讨厌这种报错的形式,毕竟一大段英文加上一个ASP.Net典型异常错误信息,显得这个站点出错了,而不是用户输入了非法的字符,可是自己又不知道怎么不让它报错,自己来处理报错。

对于希望很好的处理这个错误信息,而不使用默认ASP.Net异常报错信息的程序员们,你们不要禁用validateRequest=false。

正确的做法是在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。

举例而言,处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码:

以下是引用片段:
protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)