对于初学者,普通验证好像没法体现出“参数”的作用,但是和数据库交互的时候,由于验证数据库中数据的时候需要用到SQL语句,就会造成漏洞。比如“ select * from userData where userName='abcd' and passWord=' 'or'1'='1 ' “其实这个where条件就是没有条件,因此验证等于没有验证。所以才有了”参数“的价值。
跟之前普通验证差不多,只不过现在多了一个连接数据库,并传入SQL语句,将查询的结果返回给程序再做出判断。
普通验证的漏洞:
![](https://img-blog.csdn.net/20140302093510921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hlbmdqaWFuemhpY2hlbmh1aQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
特殊验证:需要”参数“处理:
string sqlStr = string.Format("select count(*) from userData where userName=@userName and passWord=@passWord", uN, pW);
SqlParameter tempP1 = new SqlParameter("@userName", uN);
SqlParameter tempP2 = new SqlParameter("@passWord", pW);
cmd.Parameters.Add(tempP1);
cmd.Parameters.Add(tempP2);
![](https://img-blog.csdn.net/20140302093534015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hlbmdqaWFuemhpY2hlbmh1aQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
跟之前普通验证差不多,只不过现在多了一个连接数据库,并传入SQL语句,将查询的结果返回给程序再做出判断。
普通验证的漏洞:
特殊验证:需要”参数“处理:
string sqlStr = string.Format("select count(*) from userData where userName=@userName and passWord=@passWord", uN, pW);
SqlParameter tempP1 = new SqlParameter("@userName", uN);
SqlParameter tempP2 = new SqlParameter("@passWord", pW);
cmd.Parameters.Add(tempP1);
cmd.Parameters.Add(tempP2);
只有数据完全和数据库内的信息一样,才能验证成功。
附上代码验证中”参数“作用
备注:写于2013年4月2日