不正确地编写SQL语句将会导致系统不安全节能
民生法规 2020-11-08 07:07 字号: 大 中 小
很多人都知道在一般的多用户应用系统中,只有拥有正确的用户名和密码的用户才能进入该系统。我们通常需要编写用户登录窗口来控制用户使用该系统,在下文中,我们将会了解到不正确地编写SQL语句将会导致系统的不安全。注释:本文以Visual Basic+ADO为例。<李家受柳家所托守护柳升墓地。祖上信守承诺/p>
一、漏洞的产生
用于登录的表
Users(name,pwd)
建立一个窗体Frmlogin,其上有两个文本框Text1,Text2和两个命令按钮cmdok,cmdexit。两个文本框分别用于让用户输入用户名和密码,两个命令按钮用于“登录”和“退出”。
1、定义Ado Connection对象和ADO RecordSet对象:
Option ExplicitDim Adocon As nnectionDim Adors As cordset
2、在Form_Load中进行数据库连接:
Set Adocon = New rsorLocation = en "Provider=eDB.4.0.1;Data Source=" _th " b;" cmdok中的代码Dim sqlstr As Stringsqlstr = "select * from usersswheresname='" xt _ "' and pwd='" xt "'"Set adors = New cordset Set Adors=ecute(sqlstr)If cordcount0 Then //或If Not F then.... MsgBox "Pass" //通过验证Else... MsgBox "Fail" //未通过验证End if
运行该程序,看起来这样做没有什么问题,但是当在Text1中输入任意字符串(如123),在Text2中输入a' or 'a'='a时,我们来看sqlstr此时的值:
select * from usersswheresname='123' and pwd='a' or 'a'='a'
执行这样一个SQL语句,由于or之后的'a'='a'为真值,只要users表中有记录,则它的返回的eof值一定为False,这样就轻易地绕过了系统对于用户和密码的验证。
这样的问题将会出现在所有使用select * from usersswheresname='" name "' and pwd='" password "'的各种系统中,无论你是使用那种编程语言。
二、漏洞的主要特点
在络中,以上的问题尤为突出,在许多站中都能使用这种方式进入需要进行用户名和密码验证的系统。这样的SQL漏洞具有以下的特点:
1、与编程语言或技术无关
无论是使用VB、Delphi还是ASP、JSP。
2、隐蔽性
现有的系统中有相当一部分存在着这个漏洞,而且不易觉察。
3、危害性
不需要进行用户名或密码的猜测即可轻易进入系统。
三、解决漏洞的方法
1、控制密码中不能出现空格。
2、对密码采用加密方式。
这里要注意的是,加密不能采用过于简单的算法,因为过于简单的算法会让人能够构造出形如a' or 'a'='a的密文,从而进入系统。
3、将用户验证和密码验证分开来做,先进行用户验证,如果用户存在,再进行密码验证,这样也能解决此问题。
老人用药龙岩白癜风好的医院小孩脾虚吃什么好-
-
斯诺克英锦赛特鲁姆普61戴维斯半决赛将战
斯诺克英锦赛特鲁姆普戴维斯 半决赛将战马奎尔北京时间12月...
2020-07-09 | 民生法规
-
-
八一女排为年轻交学费王之腾金软景起核心作
八一女排为年轻交学费 王之腾:金软景起核心作用发布会现场...
2020-07-03 | 民生法规
-
-
房价普跌局面未现部委表态调控绝不松劲搭配
房价普跌局面未现 部委表态调控绝不松劲新一轮房地产调控政...
2020-05-31 | 民生法规
-
-
建立完善信用建设海南将规范房地产估价行业搭配
建立完善信用建设 海南将规范房地产估价行业记者日前从海南...
2020-05-26 | 民生法规
-
-
区民政局积极探索日间照料中心运营机制创新
区民政局积极探索日间照料中心运营机制创新,助推一流 养老...
2019-12-17 | 民生法规
-
-
唐山春暖花开时远离猩红热
唐山:春暖花开时 远离猩红热( 马硕 报道)春天来了,天气...
2019-07-12 | 民生法规