|
2.sql注入
SQL注入是另外一个经常忽略的安全漏洞,但是SQL注入同时也是一种非常普遍的代码漏洞,它会导致数据库端的敏感性数据泄漏,或者服务器受到黑客的控制。例如:下面的一段代码就存在SQL语句的注入遗漏。
SqlConnection sqlcon=sqlconnA;
//打开链接
sqlcon.open();
//组合一条查询语句
SqlConnection cmd="select count(*)from user where LogonName='"+this.textBox1.Text+"'and password='"+this.textBox2,Text"';
SqlDataAdapter adpt=new SqlDataAdapter(cmd,sqlcom);
DataSet ds=new DataSet()
adpt.Fill(ds);
//关闭连接
sqlcon.Close();
if ds.Tables[0].Rows.Count>0
{ return true;
}
else
{return false;}
这段代码从textBox1获得用户输入的用户名,从textBox2获得用户输入的密码,然后执行数据库查询操作,假设textBox1的输入框输入一个已知的用户名,然后再做一些手脚,则可以不输入密码也能登录系统。这个字符串利用了SQL Server对单引号的处理方式,只要简单的组合成类似下面的字符串并输入到textBox1的输入框中即可。
Admin ‘ or ’ 1 ‘ = ' 1
这样就可以利用已知的Admin帐号,不输入密码就能登录系统,因为给预期的SQL语句注入了额外的语句,所以实际上提交到sql server数据库执行的语句变成了如下所示的语句:
select count(*) from user where LogonName='Admin' or '1'='1' and password=''
由于1=1是恒等的,因此返回的结果肯定为真,从而干扰了用户信息的正常验证,导致能绕过密码验证而登录系统。 |
|