日期:2014-05-16 浏览次数:20415 次
SIMS已经完工一段时间了,但是对其的学习还远远不够。通过自己的调试和龙哥的验收,这里出现了很多问题,在这里我从问题的角度出发,总结一下SIMS,因为错误是我们的短板,是我们的不足,我们可以犯错误,但是不要重复犯错误就行。当然一些问题可以扩延到更多的系统,它不仅仅是针对SIMS系统的,而是一些做项目的一些共性的问题,希望对大家有所帮助!
这里我把问题大概归结为了三大方面:
一,数据安全方面:以后我们做的软件一般都和数据库连接,这样对于数据库的安全性问题就是非常需要重视了。在这个系统中,遇到最严重的一个问题就是,SQL语句注入。因为在这个系统的主体部分就是对数据库数据的增删改查,但是这是需要不同权限用户才可以对其进行操作呢。下边我举个简单例子:
大家看这个界面,一般情况,我们是通过已经存储的用户和密码才能进入管理系统界面。
我们这阶段访问数据库的代码:
txtSQL = "select* from user_Info where user_ID = '" & txtusername.text & _"'and密码='" & txtpassword.text & "'"
SQL注入:在对应的输入框中输入 '_'or'_'='_'其中_代表任意字符我们就可以登录进去。
原因:txtSQL = "select * from user_Info where user_ID = '" &'1'or'1'='1' & _"'and 密码='" & '1'or'1'='1' &"'"
大家注意看这是我通过SQL server2008查询得到的结果:
他是把你数据库中的所有数据全部查出,当然能进去!而根本原因就是出在or这个字眼上,意思是查询的信息满足账户=2或者2=2,当然2=2为真值,所以会查出所有结果。
解决方法:1,因为通过这样的查询,他是查询出来符合2=2的结果,也就是所有的结果,这里我们可以限制其查出结果的数量,来防止SQL注入:语法如下
If mrc.RecordCount > 1 Then’如果查出来的条数多以1,则弹出提示框!
MsgBox "非法登陆!"
Exit Sub
End If
2,因为在使用SQL语句注入时,他用到了很多标点符号,例如,单引号 ',等号=……而我们在输入框的输入一般不会出现这种情况,这里我们就可以利用replace函数把输入这些符号给替换掉,这样也就可以避免了:语法如下:
Public Function inputstring(ByVal mystr As String) As String’定义一个替换函数,替换掉里边的符号
mystr = Trim(mystr)
mystr =