黑马程序员技术交流社区

标题: ADO.Net中的小问题 [打印本页]

作者: 韩俊    时间: 2012-11-19 12:55
标题: ADO.Net中的小问题
using(sqlCommand cmd=conn.CreateCommand())
{
   cmd.CommandText="select *from T_Users where username=@username";
   cmd.parameters.Add(new sqlparameter("username",txtusername.Text));

}
cmd.parameters.Add(new sqlparameter("username",txtusername.Text));
怎么理解
作者: 吴瑞祥    时间: 2012-11-19 13:06
cmd.parameters.Add(new sqlparameter("username",txtusername.Text));
cmd.parameters.Add这个方法是往该连接的控制台里添加参数变量,该方法需要一个sqlparameter对象.
所以要new sqlparameter("username",txtusername.Text)对象.
作者: 王新阳    时间: 2012-11-19 20:28
通过cmd.parameters.Add(new sqlparameter("username",txtusername.Text))来指定@UserName的值。 txtusername.Text是用户输入的用户名。
作者: 张静_90    时间: 2012-11-19 21:50
using(sqlCommand cmd=conn.CreateCommand()) //用using管理sqlcommand,用连接字符串conn建立一个sqlcommand
{
   cmd.CommandText="select *from T_Users where username=@username"; //sqlcommand语句的内容为查询T_Users 表中username为@username参数的值
   cmd.parameters.Add(new sqlparameter("username",txtusername.Text));    //把txtusername的文本赋值给username参数

}
cmd.parameters.Add(new sqlparameter("username",txtusername.Text));
作者: 韩温华    时间: 2012-11-19 22:45
parameter的汉语意思是参数的意思,Add是添加的意思,new是新的,cmd.CommandText需要程序来执行一条SQL语句查询相关信息,我们不能盲目的直接把
txtusername.Text放在cmd.CommandText中,这样会很容易出现漏洞,所以聪明的人想出了一个办法,将一个参数@username放在cmd.CommandText中,然后再将txtusername.Text赋给参数,这样就可以避免出现漏洞了。然后加上楼上解释
作者: 杨深    时间: 2012-11-19 23:57
本帖最后由 杨深 于 2012-11-19 23:59 编辑

大家把上面的语句都解释得很清楚了。我就说一下sql注入的事吧。
定义:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
方法:注入的方法有很多。
比如把你写的
  1. cmd.CommandText="select *from T_Users where username=@username";
复制代码
改为:
  1. string.format(“select *from T_Users where username={0}”,txtName.text).
复制代码
粗略看过去,根据用户输入的名字查询T_Users相应信息,一般只能查到对应用户的单条信息,应该是没有问题的。
但如果用户在文本框输入的是'or 1=1
实际的Sql将会改变为select *from T_Users where username=’’  or 1=1 --’
由于--后的会被注释,实际的执行,应该是根据用户名=’’即空,或1=1(永远成立)获取信息。而这条语句肯定有返回结果,而且能查询到所有的用户信息,where形同虚设。也暴露了信息,不是你编写sql的初衷。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2