黑马程序员-day3-sql注入漏洞攻击

 ------------- Windows phone 手机开发 、ASP .NET培训、期待与您交流!----------------

        SQL注入攻击是发生在应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此招到破坏。有部分人认为SQL注入攻击只是针对于Microsoft SQL Server而来,但是只要是支持批量处理SQL指令的数据库服务器,都有可能受到此种手法的攻击。

         那么应用程序如果有以下状况,可能会招到SQL注入漏洞攻击:

         1 在应用程序中使用字符串联结方式组合SQL指令。

         2 在应用程序连结数据库时使用权限过大的帐户(例如很多开发人员都喜欢用sa(自带的最高权限的系统管理员帐户)连接Microsoft SQL Server数据库)。

         3 在数据库中开放了不必要但权力过大的功能(例如在Microsoft SQL Server数据库中的xp_cmdshell延伸预存程序或是OLE Automation预存程序等)

         4 太过于信任用户所输入的数据,未限制输入的字符数,以及未对用户输入的数据做潜在指令的检查。

        下面我用代码解释具体的SQL注入漏洞攻击是怎么是实现的:

         private void button1_Click(object sender, EventArgs e)

        {
            string userName=this.textBox1.Text.Trim();
            string Password=this.textBox2.Text;
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\Sqlexpress;AttachDbFileName='|DataDirectory|\Database1.mdf';Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_Users where UserName='" + userName + "'";
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            string dbPassword = reader.GetString(reader.GetOrdinal("Password")).ToString();
                            if (dbPassword == Password)
                            {
                                MessageBox.Show("登录成功!");
                            }
                            else
                            {
                                MessageBox.Show("密码错误!");
                            }
                        }
                        else
                        {
                            MessageBox.Show("用户名错误!");
                        }
                    }
                }
            }
        }
        如果我将数据库中的用户名更改为:1' or '1'='1,密码还是数据库中的正确密码就会出现如下图片中的效果:


居然登录成功了,这就是所谓的SQL注入漏洞攻击,如果在给cmd.CommandText添加监视就会知道它是怎么攻击的,select * from T_Users where UserName='1' or '1'='1'这就是我输入用户名后产生的select语句,它的结果始终为true。

       那么如何防止这种SQL注入攻击呢?可以为cmd添加参数:

cmd.CommandText = "select * from T_xiaowei where UserName=@UserName";
                    cmd.Parameters.Add("UserName", userName);

这样就可以防止SQL注入攻击了。

      ------------- Windows phone 手机开发 、ASP .NET培训、期待与您交流!----------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值