public DataSet details(String id)
        {
            OpenDB();
            String str="Select * from data where id =@id";
            OleDbDataAdapter cmd = new OleDbDataAdapter(str,connstr);
            cmd.SelectCommand.Parameters.Add("@id", OleDbType.VarChar,7).Value = id;
            DataSet ds = new DataSet();
            cmd.Fill(ds);
            return ds;
        }
如题,谢谢解答!

解决方案 »

  1.   

    参数化、存储过程只能免去一部分注入
    存储过程能免受SQL注入攻击。这是不对,只能阻止某些种类的攻击
    存储过程如果使用未筛选的输入,容易受攻击。
    使用存储过程,则应使用参数Parameter作为存储过程的输入
    测试输入的大小和数据类型,强制执行适当的限制。。  
    测试字符串变量的内容,只接受所需的值。  
    绝不直接使用用户输入内容来生成 Transact-SQL 语句。  
    使用存储过程来验证用户输入。  
    在多层环境中,所有数据都应该在验证之后才允许进入可信区域。
    实现多层验证。
      

  2.   

    楼主这个已经很安全了,谁要说能注入,让他注一个代码看看,
    这段代码,ado.net会自动调用SQLSERVER的系统存储过程:SP_EXECUTESQL来执行你的sql,
    至少你的参数只会出现在等于号右侧的时候,是安全的