首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

学生管理系统之 vb 怎么防止SQL 语句注入(以目前之力所能想到的方法)

2012-08-31 
学生管理系统之 vb 如何防止SQL 语句注入(以目前之力所能想到的方法)前天师傅在查看作品的时候,给提到了SQ

学生管理系统之 vb 如何防止SQL 语句注入(以目前之力所能想到的方法)

前天师傅在查看作品的时候,给提到了SQL注入的问题,只见师傅在登录窗体的用户名文本框中输入:' or 1=1 -- 就这么一段看似乱七八糟的东西,然后竟登上了系统(数据库中没有这个用户),师傅也不给讲,没办法,自己整呗。

后来了解到,所谓SQL注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。对此也不是很明白,但从师傅给的上面例子来看,我理解的是:用英文单引号从新构造SQL语句,让系统执行你所重构的没有安全限制的SQL语句。其中的' 是英文单引号; or后面的内容不一定是1=1 只要一个条件为真的语句就行;-- 是将SQL语句后面的条件部分给注释了。

想了半天,关键点还是在' 英文单引号上面,因为这个是重构SQL语句的关键,师傅给提到说过用参数传递,网上也查到了说用存储过程,但是作为一个在成长中的菜鸟,都不是很理解其他的办法。跟目前自己所学习的联系起来,苦苦折腾了一上午,有了点头绪:既然英文单引号是关键,那么可不可以禁止输入英文单引号呢?这样可以跟以前学习的assic码联系起来;但是问题又出来了,自己不知道英文单引号的ASSIC码是多少!从网上查,后来查到在临时窗口中输入:debug.print "Ascii of "" “ "" is:";asc(" “ ") 可以返回所想要的ASSIC码,折腾了一会,查出来了英文单引号的ASSIC码是39 ,于是,在用户登录窗口试了一下:

Private Sub txtUserName_KeyPress(KeyAscii As Integer)

 If KeyAscii = 39 Then

        MsgBox"为了防止SQL语句注入,禁止输入英文单引号!"

txtUserName.text=""

txtUserNama.setfocus 

 End If

End Sub

测试结果:当输入英文单引号的时候,提示对话框弹出。

不足之处:

1提示对话框弹出之后,下面的照常执行,但是文本框内容还是有所输入的英文单引号,不知为何清楚不了

2防止输入英文单引号,但是还是没有办法防止,因为可以复制粘贴粘到文本框上再进行SQL注入

3要求用户手动清空英文单引号再进行输入

4把英文单引号复制到密码框的时候,容易造成系统崩溃~~~~~~~

黔驴技穷,没办法了,以目前的能力就只能给出这么一个不完美的解决方法和思路,等待着自己的进步!


5楼lishehe10小时前
加油
Re: zllaptx48699小时前
加油~~~~~
4楼zhang_ying112昨天 21:23
厉害!!
Re: zllaptx4869昨天 21:28
差远了,差点被师傅批了!!!呜呜呜呜
3楼dandanzmc前天 09:44
哈哈,建议看看刘佳韩的博客啊
Re: zllaptx4869昨天 19:43
看了 ,专家~~~~我这是狗肉 上不了酒席嘻嘻嘻嘻
Re: dandanzmc昨天 19:44
回复zllaptx4869别这么说啊
2楼lfmilaoshi前天 08:07
这就很棒了。。。。真的很棒。。。米老师
Re: zllaptx4869前天 08:33
有时候本身不要求什么,更多的时候是一个肯定的眼神或者鼓励的话语,谢谢您,米老师!!!
1楼zhanglianhai555前天 23:51
相当厉害。。。

热点排行