黑马程序员技术交流社区
标题:
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命令。
方法:注入的方法有很多。
比如把你写的
cmd.CommandText="select *from T_Users where username=@username";
复制代码
改为:
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