我说用VB写登陆程序
我看很多初学者用VB写数据库登陆都是直接用Select * From User_Id='" & Uid & "' And Password='" & Psw & "'"差不多都是这样子吧,用户名和密码在一个语句中判断
我觉得这样子很不合适,一就是SQL注入,二就是密码大小写
不知道SQL注入的我简单提一下
现在假设有两个文本框分别输入uid和psw,那我在uid文本框里输入以下内容 1' or '1'='1
密码随便,假设为abc
好,那再把这个uid置入我们的SQL语句中就是
Select * From User_Id='1' or '1'='1' and password='abc'
对,你也看出来了,这句运行出来的结果直接就是得到了所有用户!
而你判断用户是否存在的条件一般是判断它得到的记录数是否为零,为零则拒绝登陆,否则就通过验证
针对这个问题的解决办法:
第一,过滤掉敏感字符,单引号,这个只要在文本框的KeyPress事件中处理掉就可以了]
(不知道怎么处理? 在文本框的keypress事件里写入 if keyascii=asc("'") then keyascii=0 )
第二,获取到用户信息后,我们不判断记录数是否为0,而判断它是否为1,因为Uid是唯一的,获取的记录集大于1或小于1,统统拒绝
经过第一部我们已经对用户名进行了验证,然后就是密码验证,密码验证的问题就只在密码大小写了,其他的都没问题
Select * From User_Id='" & Uid & "' And Password='" & Psw & "'"
这个查询语句的psw,不论你是Abc还是abc或是AbC,它能都通过!
所以我们还需要对它进行一下步处理
用上面的语句能够获得存储在数据库中的密码,假设你定义的记录集变量为Rs,那数据库中的密码就是Rs!Password了
密码大小写验证也就是用Rs!password与Psw进行比较,这里用StrComp,而且用vbBinaryCompare方式,如果返回值为零能接受,否则拒绝
到这里,用户登陆验证也就完美结束了!
综上所述,用户登陆验证应分以下几步
1.过滤敏感字符
2.验证用户名,而且只有记录数为1才允许通过
3.验证用户密码,用Strcomp的二进制方式比较验证
加一点 虽然查询语句直接用Select * From User_Id='" & Uid & "'也能进行用户名和密码验证,但是这句一下子就把所有用户数据提不过来,数据量太大,还是同时验证一下密码好,不管是它大写还是小写的