SQL注入,在学生信息管理系统中,师父就跟我提到过这个问题。不过那时候,小屁孩一个,系统敲出来感觉就已经不错了,哪还管的上这些高深的问题呢。不幸的是,在机房收费系统中,又一次的的遇到了这个问题。真是躲得了初一躲不了十五啊!
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据。
通过这两天的了解,对SQL注入问题有了初步的认识。SQL注入是目前比较常见的针对数据库的一种攻击方式。在这种攻击方式中,攻击者会将一些恶意代码插入到字符串中。然后会通过各种手段将该字符串传递到SQLServer数据库的实例中进行分析和执行。只要这个恶意代码符合SQL语句的规则,则在代码编译与执行的时候,就不会被系统所发现。
在机房收费系统中,好多窗体都要从数据库中调用数据。
例如:在学生上机状态查询这个窗体中,如果字段名选择卡号作为条件,操作符为“=”,这就需要我们根据卡号作为查询条件,来从数据库中调取数据。(这里我们只考虑单个查询,不考虑组合查询)
txtSQL=“select *from line_info where cardno = ‘”& CardID.text &”’”
如果,“要查询的内容”文本框中,我们输入1,那么下边的表中则会出现卡号是1的上机情况。
但是,如果我们输入: 1' or '1' = '1 的话,那么下边的表中,则会出现line这个数据库表中的所有内容。因为这条语句的执行结果永远为真。
这就是SQL注入中,一种特别初级的情况。
SQL注入的危害特别大,它可以通过通过提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制你整个服务器(数据库)。
那么如何防止SQL注入呢
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFTSCAN等。
SQL注入的问题,是我们每个程序员都必须要知道和了解的问题,同时也必须要去防范。虽然现在对SQL注入的问题了解的还不是很多,但是我相信,在不久的将来,我一定可以对它有更深一步的了解和认识。