文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页技术开发数据库安全 → 不当编写SQL语句导致系统不安全

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

时间:2004/12/2 1:57:00来源:本站整理作者:蓝点我要评论(0)

在一般的多用户应用系统中,只有拥有正确的用户名和密码的用户才能进入该系统。我们通常需要编写用户登录窗口来控制用户使用该系统,这里以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.Recordcount>0 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、将用户验证和密码验证分开来做,先进行用户验证,如果用户存在,再进行密码验证,这样一来也能解决问题。




相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 没有查询到任何记录。 数据库安全技术研究如何看清楚SQL注入SQL SERVER数据库口令的脆弱性MySQL不安全临时文件建立漏洞

人气排行 MySQL3.23.31之前版本的安全漏洞网站入侵过程!如何看清楚SQL注入通过mysql入侵NT和win2000Mysql数据库的安全配置、实用技巧SQL数据库的一些攻击 SQL Server补丁安装常见问题SQL SERVER数据库口令的脆弱性