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

2016-01-29 16:34 8 1 收藏

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

【 tulaoshi.com - SQLServer 】

    在一般的多用户应用系统中,只有拥有正确的用户名和密码的用户才能进入该系统。我们通常需要编写用户登录窗口来控制用户使用该系统,这里以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、危害性

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

  三、解决漏洞的方法

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

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

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

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

 

来源:http://www.tulaoshi.com/n/20160129/1498976.html

延伸阅读
标签: 浏览器
Chrome技巧 不再显示不安全内容的提示 当你打开一个使用https安全连接的网站的时候,Chrome有事会跳出一个提示框说本页包含不安全内容,让人觉得怕怕的。但其实没那么严重,这是因为https连接的网页里有某些CSS或Javascript文件保存在了其它http连接的目录里,Chrome就会很敏感的告诉你有不安全内容。而在这种情况下IE只是将其称之为混合...
标签: ASP
  很多公司使用以下这两个步骤为它们基于 Windows 2000 的网络服务器来做组态:(1)安装 IIS 5.0、(2)不再理它。如果仅只于此的话,何不来个第三步骤:祈祷。 对于 IIS 5.0,Microsoft 针对安全性和可存取性/可用性(accessibility/usability)两方面做了很好的折衷,一般认为更倾向于后者。Data Return Corporation 的高级信息安全工...
蹭无线不安全,160WiFi开启热点更安全 近日,频频曝光,不少不法份子利用免费wifi盗取用户银行、支付宝等账号信息,骗取数万元存款。 据介绍,利用WiFi窃取他人信息,主要有三种手段: 手段1以假当真:把正当网站的地址绑架到自己的假网站上。使用者输入的网址虽然没错,但登录的却是一个仿真度极高的假网站。 手段2半路拦...
想要投资信托的人会感到疑惑,信托投资安全吗?下面就分享相关内容,一起来看看吧。 信托投资安全吗 信托产品的“门槛”比较高,一般产品均要求100万元起购,收益率也比较高,一般比同期存款利率高出3~5个百分点。在弱市之中,信托产品的收益率之高如鹤立鸡群。其次,收益与风险是对等的。但是,在经过了数次的行业大...
标签: ASP
  你的Windows 2000 /Internet Information Server (IIS) 5.0 Web 网站已经架设起来,准备开始运作时,却发现它被安全漏洞所困扰着。安全性方面的漏洞当然可以弥补,但那要看你如何去应对。如果怀有恶意的骇客还没有找到那些看不见的裂缝,这并不意味着你可以高枕无忧。他们可能只是还没有发现到你的网站而已。 那么,这套最先进的操作...

经验教程

49

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部