sql如
select*from admin whereUser='"+UserName+"'and Pwd='"+pwd+"'
如果输入 111和111,sql变成
select*from admin where UserName='111‘ and UserPwd='111' 正常
如果输入
select * from admin where User1='' or ''='' and Pwd='' or ''=''
这样语句的条件就是 User=空 或者 空=空 和 Pwd=空 或者 空=空
那么执行的结果就是 select * from admin,存在记录,验证通过。
如果我们对用户名和密码的提交字段进行过滤 不允许其中出现“空格“就可以防止or注入
还有一种情况,假定猜到用户名是admin 在输入密码的时候如果输入11 or 1=1(假设表单字段为 pass),跳转到执行界面时将如下判断if rs(pwd)=pass then 即if rs(pwd)=11 or 1=1 then 登陆,很显然这事成立的,针对这种情况,除了密码里面不能有空格之外,还有一种解决办法,那就是让表单传来的字段变量写在前面if pass=rs(pwd) then,不过最有效的方法可以对密码进行加密,这也是目前用的比较普遍的方法,md5加密也是用的比较多的加密方法,目前还没有破解的方法,因此也是比较安全的防注入防范措施。