本以为学生验收时登录窗体限制了字符,师傅验收的时候就不会验收了,没想到师傅又点了特殊字符,系统一下子就崩了。
由于数据库不是自己建的,使用的别人的数据库所以我发现登录的时候输入字母h或是特殊字符’;、。等会报错,这是因为数据库中限制 userID的类型为int ,要设置成char型也就是说字符串型才可以。
师傅说如果不限制字符很容易产生sql注入。有的输入特殊字符 ' 和一些字母连在一起就能进入系统,所谓SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,这样很容易导致信息的泄露所以限制字符是必须的。优化过程中我是限制的只能输入字母和数字(在我看来只用限制英文状态下的' 就可以了,可以找到 ' 的ascii 进行限制,sql注入就是因为在查询是’的使用不当让系统自动进入系统)。
可以限制用户名和密码只能输入数字,这个比较简单,用学生的代码就可以了
If Not IsNumeric(Trim(txtusername.Text)) Then
MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtusername.SetFocus
txtusername.Text=“”
End If
优化后我是限制只能输入数字和字母的
Dim keyas As Integer
If keyas < 0 Then
txtusername.SetFocus
txtusername.SelStart = 0
txtusername.SelLength = Len(txtusername.Text)
MsgBox "只能输入数字和字母!", vbOKOnly + vbExclamation, "警告"
ElseIf keyas > 32 And keyas < 48 Then
txtusername.SetFocus
txtusername.SelStart = 0
txtusername.SelLength = Len(txtusername.Text)
MsgBox "输入的是特殊字符!", vbOKOnly + vbExclamation, "警告"
ElseIf keyas > 57 And keyas < 64 Then
txtusername.SetFocus
txtusername.SelStart = 0
txtusername.SelLength = Len(txtusername.Text)
MsgBox "只能输入数字和字母!", vbOKOnly + vbExclamation, "警告"
Private Sub txtusername_keypress(keyascii As Integer)
keyas = keyascii
End Sub
效果如下
说到数据库,如果限制的类型和查询类型部分,虽然vb没有报错,但是查询的信息不完整。比如学生基本信息维护,查询卡号时数据库中类型要设置成int类型不能设置其他类型。