刚做了个项目,经过测试部门测试。返回来的错误。。说是SQL注入问题=============================
请求/响应: 
          GET Collection.aspx?Foobar%0D%0AAppScanHeader:%20AppScanValue/1.2-3%0D% 
          0aSecondAppScanHeader:%20whatever=Foobar%0D%0aAppScanHeader:%20AppScanValue/1.2-3% 
          0D%0aSecondAppScanHeader:%20whatever HTTP/1.1 
          Cookie: ASP.NET_SessionId=gq0p4pzgrng5rburwprwt4fa 
          Accept: */* 
          Accept-Language: en-US 
          User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32) 
===========================
在URL后面输入 
?Foobar%0D%0AAppScanHeader:%20AppScanValue/1.2-3%0D% 
          0aSecondAppScanHeader:%20whatever=Foobar%0D%0aAppScanHeader:%20AppScanValue/1.2-3% 
          0D%0aSecondAppScanHeader:%20whatever
就会报错,报错如下:
'AppScanValue' 附近有语法错误。
标签 'AppScanHeader' 已声明。标签名称在查询批次或存储过程内部必须唯一。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 'AppScanValue' 附近有语法错误。
标签 'AppScanHeader' 已声明。标签名称在查询批次或存储过程内部必须唯一。源错误: 
行 48:             //q.Parameters.Add("@memberId", memberid, SqlDbType.Int, 4);
行 49:             //throw new Exception(sql);
行 50:             return q.ExecuteDataset(UsedCar).Tables[0];
行 51: 
行 52:         }
 源文件: D:\Project\UsedCar_2.2\UsedCar\DAL.UsedCar\Service\UserValiation.cs    行: 50 堆栈跟踪: [SqlException (0x80131904): 'AppScanValue' 附近有语法错误。
标签 'AppScanHeader' 已声明。标签名称在查询批次或存储过程内部必须唯一。]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1951450
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4849003
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2394
   System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33
   System.Data.SqlClient.SqlDataReader.get_MetaData() +83
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141
   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12
   System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +130
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +287
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +94
   Auto.Lib3.DataAccess.SqlClient.SqlDataAccess.ExecuteDataset(SqlQuery q) +94
   Auto.Lib3.DataAccess.SqlClient.SqlDataAccess.ExecuteDataset(SqlQuery q, DatabaseProperty dp) +47
   Auto.Lib3.DataAccess.SqlClient.SqlQuerySharper.ExecuteDataset(SqlQuery q, DatabaseProperty dp) +26
   Auto.DAL.UsedCar.Service.UserValiation.GetDealerId(Int32 memberid) in D:\Project\UsedCar_2.2\UsedCar\DAL.UsedCar\Service\UserValiation.cs:50
   UserValiation.GetDealerId(Int32 memberid) in D:\Project\UsedCar_2.2\UsedCar\BLL.UsedCar\Service\UserValiation.cs:199
   Auto.Web.UsedCar.UserCenter.Controls.ClubHeader.Page_Load(Object sender, EventArgs e) in D:\Project\UsedCar_2.2\UsedCar\Web.UsedCar.UserCenter\Controls\ClubHeader.ascx.cs:37
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627========================================================//调用代码
int dealerId = UserValiation.GetDealerId(1);
//执行SQL语句代码public static DataTable GetDealerId(int memberid)
        {
            string sql = @"SELECT [DealerId] from [Relation] with(nolock) where [ClubMemberId]=@memberId";
            SqlQuery q = new SqlQuery
            {
                CommandType = CommandType.Text,
                CommandText = sql
            };
            q.Parameters.Add("@memberId", memberid, SqlDbType.Int, 4);            return q.ExecuteDataset(UsedCar).Tables[0];        }
怎么修改呀???求助~~~~~~~~~

解决方案 »

  1.   

    编码格式出了问题吧?
    Collection.aspx?Foobar%0D%0AAppScanHeader:%20AppScanValue/1.2-3%0D%
    这个?后面是传递的参数
      

  2.   

    根据你的错误信息,应该是入库的时候有特殊字符,先过滤一下:详见:
    http://hi.baidu.com/thought007/blog/item/e1a07e77da777c118601b067.html
      

  3.   


    看了。。不是单引号的问题。。调用我直接int dealerId = UserValiation.GetDealerId(1);加入了整形的 1 我把SQL抛出是正常的SQL语句
      

  4.   

    标签名称在查询批次或存储过程内部必须唯一
    貌似你没有使用存储过程,那就是查询的问题。是不是出现类似
    select  id,name as id from table 
    的情况了?
      

  5.   

    Foobar?AppScanHeader: AppScanValue/1.2-3SecondAppScanHeader这个是什么?我看不懂标签 'AppScanHeader' 已声明 ,这个AppScanHeader重复声明了
      

  6.   

    检查数据库数据,在查询分析器执行
    把strimg str里赋的字串中所有的单引号都再加一个
      

  7.   


    我把方法改成写死的。。照样还是报的同样的错误。。我根本就没有用到存储过程
    public static DataTable GetDealerId(int memberid)
            {
                string sql = @"SELECT [DealerId] from [Relation] with(nolock) where [ClubMemberId]=1";
                SqlQuery q = new SqlQuery
                {
                    CommandType = CommandType.Text,
                    CommandText = sql
                };            return q.ExecuteDataset(UsedCar).Tables[0];        }