暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL注入攻击

贵州电大一数据库原理与应用 2018-04-11
216

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。程序员在编写代码的时候,如果没有对用户输入数据的合法性进行判断,就会使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

实例参考:

我们有一个Access系统设计的进销存管理系统,用户输入用户名和密码登录,如图,

如果我们打开“确定”按钮对应的代码,我们看到如下代码,

。。。。。。

If IsNull(txt_name) Then

MsgBox "请输入用户名!",vbCritical, "提示"

  txt_name.SetFocus

Else

  txtSQL = "SELECT * from 管理员 where (用户名='"& txt_name & "') and (密码='"& Txtpwd & "')"

 Set mrc =ExeSQL(txtSQL)

   If mrc.EOF Then

     MsgBox "没有此用户名称或密码不正确!", vbCritical, "提示"

   Else

 mrc.Close

 Set mrc = Nothing

     Me.Visible = False

      '打开切换面板

     DoCmd.OpenForm"切换面板"

   End If

 End If

。。。。。。

请注意分析红色部分的SQL语句,如果我在用户名和密码中输入正确值,假设用户名和密码均为admin,那么代码中红色部分将替代为

txtSQL = "SELECT * from 管理员 where (用户名='admin')and (密码=' admin ')"

执行语句,在管理员表中找到相应记录,于是mrc.EOF为假,用户登录系统,如果用户名密码不对,mrc.EOF为真,提示出错。

但是,这一段代码是有问题的,我们可以利用SQL注入攻击,直接登录系统,比如我在用户名和密码中举输入“1' OR '1'='1”,那么,上面代码中红色部分的SQL语句就会变为:

txtSQL = "SELECT * from 管理员 where (用户名='1' OR '1'='1') and (密码=' 1' OR '1'='1 ')"

能看出问题吗?我们再用颜色标注一下:

txtSQL= "SELECT * from 管理员 where (用户名='1' OR '1'='1') and(密码=' 1' OR '1'='1 ')"

我们会发现:(用户名='1' OR '1'='1'恒为真,(密码=' 1' OR '1'='1 '恒为真,于是导致系统判断我是合法用户,可以正常登录系统了。

如果读了上面的内容你还是有不理解,下次课我们将实例演示并分析给你看。

 


文章转载自贵州电大一数据库原理与应用,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论