组合查询的实现

create   proc   test(@username   char(10),@usersex   char(2),@useraddress   varchar(100))  
  as  
  declare   @sqlstr   varchar(1000)  
  set   @sqlstr='select   top   100   *   from   datatable   where   1=1'  
  if   @username<>''    
    set   @sqlstr=@sqlstr   +   '   and   username   like   ''%''   +   @username+   ''%'''  
  if   @usersex<>''    
  set   @sqlstr=@sqlstr   +   '   and   usersex=   '''   +   @usersex   +   ''''  
  if   @useraddress<>''    
  set   @sqlstr=@sqlstr   +   '   and   useraddress   like   ''%''   +   @useraddress''%'''  
   
  exec(@sqlstr)  

 

由于是组合条件生成的SQL 语句,所以防注入式攻击也就十分重要了,暂时没有太好的办法,用了一个下面的函数:


   #region
    /// <summary>
    /// 函数功能:检查一下当前页面中所有的TextBox,看看是不是有SQL 注入式的攻击!
    /// 作者:黄海
    /// 日期:2007-3-05
    /// </summary>
    /// <param name="page"> 指定的页面</param>
    /// 用法:ErrorSql(this)
    public  bool ErrorSql(System.Web.UI.Control page)
    {
        string[] ErrorSql ={ "delete ", "insert ", "select ", "update ", "exec ", "declare " ,@"""",@"/", "$", "!", "<", ">", "?", "#", "^", "%", "@", "~", "`", "&", "*", "(", ")", ";", ":", "+", "="};

        int nPageControls = page.Controls.Count;
        for (int i = 0; i < nPageControls; i++)
        {
            foreach (System.Web.UI.Control control in page.Controls[i].Controls)
            {
                if (control is TextBox)
                {
                    string temp=(control as TextBox).Text;

                    for(int j=0;j<ErrorSql.Length;j++)
                    {
                        if(temp.IndexOf(ErrorSql[j].ToString())>=0)
                        {
                            return true;
                        }//end if
                    }//end for
                }//end if
            }//end foreach
        }//end for
        return false;
    }
    #endregion


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值