不正确编写SQL语句会导致系统不安全

果果麻花

果果麻花

2016-02-19 21:19

下面,图老师小编带您去了解一下不正确编写SQL语句会导致系统不安全,生活就是不断的发现新事物,get新技能~

    很多人都知道在一般的多用户应用系统中,只有拥有正确的用户名和密码的用户才能进入该系统。我们通常需要编写用户登录窗口来控制用户使用该系统,在下文中,我们将会了解到不正确地编写SQL语句将会导致系统的不安全。注释:本文以Visual Basic+ADO为例。

  一、漏洞的产生

  用于登录的表

  Users(name,pwd)

  建立一个窗体Frmlogin,其上有两个文本框Text1,Text2和两个命令按钮cmdok,cmdexit。两个文本框分别用于让用户输入用户名和密码,两个命令按钮用于“登录”和“退出”。

  1、定义Ado Connection对象和ADO RecordSet对象:

  Option Explicit

  Dim Adocon As ADODB.Connection

  Dim Adors As ADODB.Recordset

  2、在Form_Load中进行数据库连接:

  Set Adocon = New ADODB.Connection

  Adocon.CursorLocation = adUseClient

  adocon.Open "Provider=Microsoft.jet.OLeDB.4.0.1;Data Source=" && _

  App.Path && " est.mdb;"

  cmdok中的代码

  Dim sqlstr As String

  sqlstr = "select * from usersswheresname='" && Text1.Text && _

  "' and pwd='" && Text2.Text && "'"

  Set adors = New ADODB.Recordset

  Set Adors=Adocon.Execute(sqlstr)

  If Adors.Recordcount0 Then //或If Not Adors.EOF 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、危害性

  不需要进行用户名或密码的猜测即可轻易进入系统。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  三、解决漏洞的方法

  1、控制密码中不能出现空格。

  2、对密码采用加密方式。

  这里要注意的是,加密不能采用过于简单的算法,因为过于简单的算法会让人能够构造出形如a' or 'a'='a的密文,从而进入系统。

  3、将用户验证和密码验证分开来做,先进行用户验证,如果用户存在,再进行密码验证,这样也能解决此问题。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

不正确编写SQL语句会导致系统不安全

编程语言 网络编程
不正确编写SQL语句会导致系统不安全

不当编写SQL语句导致系统不安全

SQLServer
不当编写SQL语句导致系统不安全

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

睡姿不正确会导致不孕?

电脑网络
睡姿不正确会导致不孕?

减肥方式不正确也会导致脱发!

染发 美发 头发护理
减肥方式不正确也会导致脱发!

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

“安全期”不安全

月子
“安全期”不安全

AJAX真的不安全?

Web开发
AJAX真的不安全?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何在Win 8上安装 .NET Framework 3.5

如何在Win 8上安装 .NET Framework 3.5

Win8系统如何关闭操作中心?

Win8系统如何关闭操作中心?
下拉加载更多内容 ↓