不当编写SQL语句导致系统不安全数据库教程电脑资料
不当编写SQL语句导致系统不平安数据库教程 电脑资料 平安|语句 一、破绽的产生 用于的表 Users(name,pwd) 建立一个窗体Frmlogin,其上有两个文本框Text1,Text2和两个命
不当编写SQL语句导致系统不平安数据库教程电脑资料 平安|语句 一、破绽的产生 用于的表 Users(name,pwd) 建立一个窗体Frmlogin,其上有两个文本框Text1,Text2和两个 命令按钮cmdok,cmdexit。两个文本框分别用于让用户输入用户名 和密码,两个命令按钮用于“”和“退出”。 1、定义AdoConnection对象和ADORecordSet对象: OptionExplicitDimAdoconAsADODB.ConnectionDimAdorsAsADODB.Recordset 2、在FormLoad中进展数据库连接: SetAdocon=NewADODB.ConnectionAdocon.CursorLocation=adUseClientadocon.Open "Provider=Microsoft.jet.OLeDB.4.0.1;DataSource="&&App.Path&&"est.mdb;"cmdok 中的代码DimsqlstrAsStringsqlstr="select*fromusersswheresname='"&& Text1.Text&&"'andpwd='"&&Text2.Text&&"'"Setadors=NewADODB.Recordset SetAdors=Adocon.Execute(sqlstr)IfAdors.Recordcount>0Then//或IfNotAdors.EOF then....MsgBox"Pass"//通过验证Else...MsgBox"Fail"//未通过验证Endif 运行该程序,看起来这样做没有什么问题,但是当在Text1中输入 任意字符串(如123),在Text2中输入a'or'a'='a时,我们来看 sqlstr此时的值: select*fromusersswheresname='123'andpwd='a'or'a'='a' 执行这样一个SQL语句,由于or之后的'a'='a'为真值,只要 users表中有记录,那么它的返回的eof值一定为False,这样就轻 易地绕过了系统对于用户和密码的验证, 这样的问题将会出如今所有使用select*from usersswheresname='"&&name&&"'andpwd='"&&password &&"'的各种系统中,无论你是使用那种编程语言。

