我是个初学者,请问如果用分层的办法,建立一个验证层,再建立一个参数调用层,来实现数据的插入和修改,删除,但是在数据层中我使用“+”的方法,不是用的“@”参数传递的方法,请问能防住SQL注入吗?
另外我的代码是用“+”的方法写的:string sql = "insert message (work,name,phone,text) values ('" + work + "','" + name + "', '" + phone + "','" + text + "')";
其中work,name,phone,text为自定义参数,请问改成参数传递该怎么改?(“@”的方法)

解决方案 »

  1.   

    使用SQL参数啊!
    string sql = "insert message (work,name,phone,text) values (@work ,@name,@ phone,@text)";
      

  2.   

    string sql = "insert message (work,name,phone,text) values (@work ,@name , @ phone ,@ text ;
      

  3.   

    cmd.paramenters.add(类型,大小,值);那要看是不是由用户输入了,如果是由用户输入的地方尽量不要用拼写字符串的方式,要用参数方式,而且,要在客户端做一个格式检查,再在处理时套一个try块
      

  4.   


        public static bool InsertData(string work,string name,int phone.string text)
            {
                bool flag = false;
                string sql =
                    "INSERT INTO [message]([work],[name],[phone],[text]) values(@workS,@nameS,@phoneS,@textS)";
                SqlParameter[] param = new SqlParameter[] { 
                    new SqlParameter("@workS",work),
                    new SqlParameter("@nameS",name),
                    new SqlParameter("@phoneS",phone),
                    new SqlParameter("@textS",text),            };
                int count = DBHelper.ExecuteCmd(sql, param);
                if (count > 0)
                {
                    flag = true;
                }
                return flag;
            }最后返回的就是  是否插入了   返回true为插入了数据
    如果你想要其他的返回  你可以自己替换
      

  5.   

    写一个防sql注入的方法,在你给参数赋值的时候调用
      

  6.   

    5楼的高手,请问你的这段代码中“SqlParameter[] param”是什么意思?using空间是什么?
      

  7.   

    那是一个sqlcommand里的参数对象,专门望数据库里传 字段用的,可以是普通执行,也可以是存储过程、
    比如sqlcommand.commandtype=commandtpye.preedure这个是存储过程。因为我忘了,大概是这样
      

  8.   


    不行啊,5楼的代码,但是我为什么老师报这个错误啊?必须声明标量变量 "@adminS"。
      

  9.   


    你确定 values 里面有这个变量没有 ?
      

  10.   

    把你的代码贴出来看看
    using System.Data.SqlClient;
      

  11.   

    要防SQL注入就要了解所有可能的SQL注入.
    个人认为不存在验证层一说. 这个属于输入校验Input validation. 应该与各页面结合起来. 同时使用客户端验证和服务器端验证. 之所以要同时用客户端和服务器端验证, 客户端验证是为了减少向服务器提交的次数, 服务器端验证是为了安全, 因为黑客可以绕过Javascript等向服务器提交非法数据. 所有需要输入的地方, 包括web form中每一个字段, URL中参数(即querystring), 都必须强制检查输入的合法性.拼接SQL的方式很容易带来SQL注入的危险. 用SqlParameter参数传递, 只能部分杜绝SQL注入的危险. 真正能杜绝SQL注入的就是防止病从口入, 即在所有输入数据的地方加上严格的数据合法检查.
      

  12.   

    防sql注入有三种办法:一、将sql语句都用存储过程来替代;二、用sql参数来替代;三、验证字符串