从客户端检测到潜在危险的Request.Form值

时间:2015-03-25 05:25:28

标签: c# asp.net webforms

Webform1.aspx有grid.Grid包含编辑按钮。点击编辑按钮,用户将被重定向到webform2.aspx页面。 Querystring id传递给Webform2.aspxWebform2.aspx显示该ID的所有数据。 Webform包含下拉列表,文本框和按钮等。

我从数据库中获取记录并分配到下拉列表,文本框和按钮等控件。为包含<>的文本框分配值并尝试更新记录时。它引发了一个例外。例外是A potentially dangerous Request.Form value was detected from the client。所以我尝试使用htmlencode方法。

以下是我的代码 在cs文件中

 public partial class Webform1 : System.Web.UI.Page
    {
     string strUrl="";
    protected void Page_Load(object sender, EventArgs e)
    {

    // Fetching value from database and assigning to string   
    Textbox1.Text= dr["URL"].ToString();
    // directly use string 
   //strUrl= dr["URL"].ToString();
    }

    protected void button_Click(object sender, EventArgs e)  
    {
    string s2 ="";  
    string s3 = "";             
    strUrl= Textbox1.Text;                   
         if ((strUrl.Contains("<")) || (strUrl.Contains(">")))
         {
           s2 = Server.HtmlEncode("<");
           s3 = Server.HtmlEncode(">");
           strUrl= strPingUrl.Replace("<", s2);
           strUrl= strPingUrl.Replace(">", s3);                                    
       }
     Textbox1.Text =strUrl; 
    // updation code

当我尝试插入它时会抛出异常。如果我使用string,它就不会为textbox赋值。它正在工作。我能够更新记录。但我不想这样。用户可以更改文本框中的值。所以我想从文本框中获取价值。

1 个答案:

答案 0 :(得分:-2)

要禁用页面上的请求验证,必须将Page指令的validateRequest属性设置为false:

<%@ Page validateRequest="false" %> 

要禁用应用程序的请求验证,您必须为应用程序修改或创建Web.config文件,并将该部分的validateRequest属性设置为false:

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

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

在.NET 4中,您可能需要添加到web.config:

 <httpRuntime requestValidationMode="2.0" /> 

详细说明:

  1. http://www.asp.net/whitepapers/request-validation
  2. http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc245724857