Select * From tb WHere a=@a and b=@b and c like ('%'+@c+'%')

解决方案 »

  1.   

    控制传入的参数,过滤SQL的关键字符
      

  2.   

    我觉得 只需要将 单引号给处理下就可以了  不知道为什么其它关键字符也要处理   很不理解
    找本web更安全编写代码看下就知道,以后你网站发布后,只要是多人点,人家就会搞你的,而sql注入式攻击是常见的一种
      

  3.   

    不应该替换成中文的,应该替换成两个单引号(在SQL中表示转义后的单引号,不参与SQL解析)
    强类型的,在程序里进行转换校验后再使用,比如
    int.TryParse(para, out intPara) ..最好还是用SQL参数传入
      

  4.   

    其他的我输入个  and 1=1,是不是也很可怕呢?
      

  5.   

    我输入';truncate table xx--,你update我看看
      

  6.   

    我输入';truncate table xx--,你update我看看
    你输入后  我后台代码 首先会将你的 单引号 替换成了 中文的单引号   整个字符就成了   id='‘;truncate table xx--'  你觉得  还会注入sql么
      

  7.   

    参数化,实例:
     
    protected void Btn_Login_Click(object sender, EventArgs e)
            {
                List<SqlParameter> sqlpa = new List<SqlParameter>();//实例化List<SqlParameter>
                sqlpa.Add(new SqlParameter("@name", Txt_UserName.Text.ToString().Trim()));//给List<SqlParameter>赋植
                string sql = "select User_ID,User_TrueName,User_PassWord from User_Info where User_Name=@name and ValidFlay=1";//sql语句
                DataTable DTUser = SH.Select(sql, sqlpa);//查询Table
     }
    public bool Operation(string Sql, List<SqlParameter> parameter)
            {
                int falg = 0;
                SqlConnection sqlCon = new SqlConnection();//实例化SqlConnection
                sqlCon.ConnectionString = ConnString;//数据库连接字符串
                Sql = common.SqlToUBB(Sql);
                try
                {
                    sqlCon.Open();//打开数据库连接
                    SqlCommand cmd1 = new SqlCommand(Sql, sqlCon);//sql语句
                    if (parameter != null)//若有参数
                    {
                        for (int i = 0; i < parameter.Count; i++)//历遍
                        {
                            parameter[i].Value = common.HtmlToUBB(parameter[i].Value.ToString());
                            cmd1.Parameters.Add(parameter[i]);//给SqlCommand添加参数
                        }
                    }
                    falg = cmd1.ExecuteNonQuery();//获取受影响行数
                }
                finally
                {
                    sqlCon.Close();//关闭数据库连接
                }
                if (falg > 0)//操作成功
                {
                    return true;
                }
                return false;
            }
      

  8.   

    其实sql拼接需要弄两个字符就够了,' "这两个符号,'变'' " 变"" 好像在sql中 '--' 单引号中间的字符都是内容,如果不是 在处理一下 - 号就是了
      

  9.   

    比如说   id='--' 
    楼上的有举例 id='';truncate table xx=='   这样确实可怕
    但是你处理 ' " 这两个符号就变成了
    id=''';truncate table xx==' 这样数据会当成 是 ';truncate table xx==这样一个数据
      

  10.   


    先把带参数的查询语句拼出来,最后再把用户的输入导入到参数里面。
    那样就可以彻底地解决 SQL注入的问题了。