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 ')恒为真,于是导致系统判断我是合法用户,可以正常登录系统了。
如果读了上面的内容你还是有不理解,下次课我们将实例演示并分析给你看。




