标题:我说用VB写登陆程序
只看楼主
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
结帖率:37.5%
 问题点数:0 回复次数:5 
我说用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 & "'也能进行用户名和密码验证,但是这句一下子就把所有用户数据提不过来,数据量太大,还是同时验证一下密码好,不管是它大写还是小写的
收到的鲜花
  • ??2008-05-19 15:34 送鲜花  1朵   附言:1
搜索更多相关主题的帖子: SQL 数据库 quot uid 
2008-05-19 12:07
??
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-11-24
得分:0 
非常好!!!
2008-05-19 15:35
hxfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:5807
专家分:108
注 册:2005-4-7
得分:0 
注册的时候禁止使用单引号,登陆的时候也禁止使用单引号
但引号危害很大的.....

2008-05-19 19:57
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
第一,过滤掉敏感字符,单引号,这个只要在文本框的KeyPress事件中处理掉就可以了]
(不知道怎么处理?  在文本框的keypress事件里写入 if keyascii=asc("'") then keyascii=0 )


粘贴呢?
2008-05-19 21:08
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
得分:0 
要钻牛角尖啊?QQ都能粘贴单引号呢
后面还有两步处理呢,一定要粘贴了也没用的,反正就是登陆不进
一定要控制粘贴的话就在Change事件里用Replace吧,控制单引号里办法很多,还可以在输入完以后再用instr检验单引号
再说了,QQ都能粘贴输单引号的,重点不在用多复杂多高深的办法在TextBox下手控制单引号
2008-05-19 22:12
ouzhiguang
Rank: 1
来 自:湖南长沙
等 级:新手上路
威 望:1
帖 子:240
专家分:0
注 册:2007-5-18
得分:0 
那还不一样?在注册或登录的时候发现有“‘”就报错!
就不会这样啦!
2008-05-20 15:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-215048-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.123830 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved