据我所知如下:
普通的sql查询语句是拼接式的如:string sql="select * from table1 where username = '"+Request.QueryString("uname")+"'";
这样很容易引起sql注入。
但是改成string sql="select * from table1 where username = @uname";
SqlParameter parma= new SqlParameter("@uname", SqlDbType.VarChar, 50);
parma.Value=Request.QueryString("uname");
SqlCommand cmd=new SqlCommand(sql,conn);
cmd.Parameters.Add(param);
SqlDataReader sdr = cmd.ExecuteReader();
....这样就能防止sql注入,可是我不明白的是这样为什么就可以防止?
普通的sql查询语句是拼接式的如:string sql="select * from table1 where username = '"+Request.QueryString("uname")+"'";
这样很容易引起sql注入。
但是改成string sql="select * from table1 where username = @uname";
SqlParameter parma= new SqlParameter("@uname", SqlDbType.VarChar, 50);
parma.Value=Request.QueryString("uname");
SqlCommand cmd=new SqlCommand(sql,conn);
cmd.Parameters.Add(param);
SqlDataReader sdr = cmd.ExecuteReader();
....这样就能防止sql注入,可是我不明白的是这样为什么就可以防止?
这样很容易引起sql注入。如果用户输入的是: aa' or 1=1;delete table1 --生成的sql语句是什么?会产生什么后果?
使用HtmlEncode方法
去看看msdn,上面都有
就是因为 or 1=1是肯定成立的,就忽略了前面的条件
但是参数化就避免了这个问题了,你输入的任何东西都是参数,到数据库去比较输入的用户名是否存在呢,你输入的都会当作用户名来查询的,
所以也想知道C#的写法!