在ASP.NET中,以前一直用 new SqlParameter("@pwd",pwd) ;但是有前辈说不能用这种写法,这样和 select id from users where pwd = '+pwd+' 没什么两样,不能防止 SQL 注入,于是我自己又写了个简单的程序测试了一遍,没发现 new SqlParameter("@pwd",pwd) 这种写法能 SQL 注入啊,难道这种写法不能防止 SQL 注入?纳了闷了,求高人指点。
调试欢乐多
这种写法比拼接好
select id from users where pwd = @pwd;//执行这个sql才叫带参数的,你那样还是拼接字符串
我就是这样写的:
string sql = "select ID from users where pwd = @pwd";
SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd));
string sql = "select ID from users where pwd = @pwd"; SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd,麻烦各位回复前先看一遍问题再回复。
SqlParameter[] parameters = {
new SqlParameter("@StartTime", SqlDbType.DateTime,8),
new SqlParameter("@EndTime", SqlDbType.DateTime,8),
new SqlParameter("@UserName", SqlDbType.NVarChar,15)};
parameters[0].Value=StartTime;
parameters[1].Value=EndTime;
parameters[2].Value=UserName;
SqlDataReader sdr = SqlHelper.ExecuteReader(conn,CommandType.Text,sql,new SqlParameter("@pwd",pwd));这就是参数化查询了,这样做pwd里面不管是什么,数据库都把它当成一个参数,而不是查询结构的一部分。