数据库SQL注入攻击以及解决方案

--数据库SQL注入攻击

select count(*) from 表 where LoginID='lqwvje' and pwd='123'
--拿上面的一个经常用的用户登入实例 正常情况下是没有问题 count>0即可以登入成功

--用户名一但输入了数据库特殊字符如一下  一段代码  那就可以正常登入
select count(*) from 表 where LoginID='lqwvje' or '1=1' --and pwd='123'

--更可怕的是  把整个用户信息 表 都删除掉了  如果没有备份的数据库那就完蛋了
select count(*) from 表 where LoginID='lqwvje' or '1=1'; drop table 表 --and pwd='123'


--防SQL注入攻击  样例代码如下 仅供参考
    public void test()
    {
        string conStr = @"Data Source=.\SQLEXPRESS; Initial Catalog=Data20170909;User ID=sa;Password=sa";
        using (SqlConnection conn = new SqlConnection(conStr))
        {
            string sqlStr = "select count(*) from 表 where LoginID=@LoginID and pwd=@pwd";
            using (SqlCommand cmd = new SqlCommand(sqlStr, conn))
            {
                SqlParameter parLoginID = new SqlParameter("@LoginID", System.Data.SqlDbType.VarChar, 50) { Value = "获得的字符串" };
                SqlParameter parPwd = new SqlParameter("@pwd", System.Data.SqlDbType.VarChar, 50) { Value = "获得的字符串" };
                    cmd.Parameters.Add(parLoginID);
                    cmd.Parameters.Add(parPwd);
                    conn.Open();
                    cmd.ExecuteScalar();
            }
        }
    }

评论