在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
简单地说,Sql注入就是将Sql代码传递到应用程序的过程,但不是按照应用程序开发人员预定或期望的方式插入,相当大一部分程序员在编写代码的时候,并没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。这种漏洞并非系统照成,而是由程序员在编程中忽略了安全因素。Sql注入漏洞攻击原理就是利用非法参数获得敏感信息,收集整理,分析出管理员账号密码。 当开发应用程序时,尤其是有关数据库信息的查询,查询语句中可能会有拼接字符串注入漏洞,这便会导致用户资料泄露。那么该如何防范此类漏洞的出现。 可以为查询语句设置参数,方法实例如下面所示: Using(Sqlconnection cn = new sqlconnection(“连接字符串”)) { cn.open(); using(sqlcommand cmd = cn.creatcommand()) { cmd.commandtext=”select * from T_table where name=’”+textbox.text+”’”; (此时如果在文本框中输入1’ or ‘1’=’1)就可以获取数据库信息。会造成信息的泄露。解决办法就是引入参数。方法如下。 cmd.commandtext=”select * from T_table where name=@Name”; cmd.Parameters.Add (new sqlParameter ("@Name", textbox.text))}; 这样查询数据就会从数据库查询比对,不会再出现注入漏洞攻击的情况。 } } 每一次必不可少的会写对数据库操作的Sql语句,例如以下验证登陆的Sql语句: string strSql="select * from Table Where UserName='"+textBoxUserName.Text+'"and UserPassord='"+textBoxPassword.Text+"'"; 下面我们把上面一行的语句代入到前面用于登录的Sql语句中,得到下面的Sql语句: 通过这种Sql语法漏洞,黑客们可以达到他们的目的,但Sql注入漏洞攻击绝对不止这一种,复杂的还有很多,我不在说了。下面我谈一下我知道在.NET中应对上面这种Sql注入攻击的防范措施。 最完美的一种方法就是使用ADO.NET Command对象的参数集合,在前面的可以进行Sql注入漏洞攻击的Sql语句中,通过使用字符串拼接方法动态创建查询,在这里我们可以利用ADO.NET Command的对象的Parameters属性提供的功能,传递执行Sql语句所使用的参数,在这种方法中参数名必须以字符@为前缀,例如以下Sql查询语句: 我们在动态创建Sql语句中使用了@UserName和@UserPassword名称,而不是拼接多个字符串,这样就可以使用SqlCommand对象的Parameters集合传递值,该方法可以安全的创建动态Sql连接。参数在Sql Server内部不是简单的字符串替换,Sql Server直接0用添加的值进行数据比较,因此不会有Sql注入漏洞攻击。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论