根据我个人的理解SQL注入是一种利用程序员编程逻辑的漏洞来不利用用户名或密码来进行非法进入系统的行为。
优化之前学生登录的时候如果在用户名文本框里输入“ ' or 1=1 -”就可以直接登录系统。基本原理很简单:就是利用SQL语句的or只要成立一个语句就正确,-可以把后面的语句注释掉,所以就可以轻易入侵了。
我们要做的就是避免这种情况的发生,主要是避免“ ' “符号的使用还有其他的符号使用。
第一种办法:
这是我第一次优化的时候的写法,避免了“ ' ”的输入,逻辑还算严密。但是它还有一个缺点就是代码在keypress事件里面,这就导致用户名输入的时候只能输入一个。刚开始的时候我的用户名本身就是一个数字所以没有发现这个漏洞,学习一定得找个细心的小伙伴,测试系统多找几个人来测试,不同的人会发现不同的问题。
Private Sub txtusername_KeyPress(KeyAscii As Integer)
txtusername.Text = ""
If KeyAscii = 39 Then
MsgBox "是非法字符,请重新输入!"
txtusername.Text = ""
txtusername.SetFocus
txtpassword.Enabled = False
If txtpassword.Enabled = False Then
cmdok.Enabled = False
Else
cmdok.Enabled = True
End If
Else
txtpassword.Enabled = True
cmdok.Enabled = True
End If
End Sub
第二种办法:
这种办法克服了上面办法的不足,可以控制任意字符的输入!
Private Sub txtusername_Change()
Dim s As String
Dim ss As Long
Dim l As Long
Dim i As Long
s = ",。、;’【】·!@#¥%……&*()——+|~《》?:“{}',.;\/:*?""<>|{}[]!@#$%$^&()~`_-+=" '需要禁止的字符都放这里吧
ss = txtusername.SelStart 'selstart是选中文本的开始位置
For i = 1 To Len(s) 'len(s)求s的长度
l = Len(txtusername.Text)
txtusername.Text = Replace(txtusername.Text, Mid(s, i, 1), "") 'replace是SQL语句里面的替换,把txtusername.text里面的mid(s,i,l)替换为“”
'Mid就是从一个字符串中取子字符串,比如a="aabbcc",我们想取出"bb"就可以用Mid("aabbcc",3,2)
Next
txtusername.SelStart = ss
End Sub