QL注入攻击是最为常见的程序漏洞攻击方式,引起攻击的根本原因就是盲目信任用户,将用户输入用来直接构造SQL语句或存储过程的参数。以下列出三种攻击的形式:
A.用户登录:假设登录页面有两个文本框,分别用来供用户输入帐号和密码,利用执行SQL语句来判断用户是否为合法用户。试想,如果黑客在密码文本框中输入‘OR0=0,即不管前面输入的用户帐号和密码是什么,OR后面的0=0总是成立的,最后结果就是该黑客成为了合法的用户。
B.用户输入:假设网页中有个搜索功能,只要用户输入搜索关键字,系统就列出符合条件的所有记录,可是,如果黑客在关键字文本框中输入‘GODROPTABLE用户表,后果是用户表被彻底删除。
C.参数传递:假设我们有个网页链接地址是HTTP://……asp?id=22,然后ASP在页面中利用Request.QueryString[‘id‘]取得该id值,构成某SQL语句,这种情况很常见。可是,如果黑客将地址变为HTTP://……asp?id=22anduser=0,结果会怎样?如果程序员有没有对系统的出错提示进行屏蔽处理的话,黑客就获得了数据库的用户名,这为他们的进一步攻击提供了很好的条件。
解决方法:以上几个例子只是为了起到抛砖引玉的作用,其实,黑客利用“猜测+精通的
sql语言+反复尝试”的方式,可以构造出各种各样的sql入侵。作为程序员,如何来防御或者降低受攻击的几率呢?作者在实际中是按以下方法做的:
第一:在用户输入页面加以友好备注,告知用户只能输入哪些字符;
第二:在客户端利用ASP自带的校验控件和正则表达式对用户输入进行校验,发现非法字符,提示用户且终止程序进行;
第三:为了防止黑客避开客户端校验直接进入后台,在后台程序中利用一个公用函数再次对用户输入进行检查,一旦发现可疑输入,立即终止程序,但不进行提示,同时,将黑客IP、动作、日期等信息保存到日志数据表中以备核查。
第四:对于参数的情况,页面利用QueryString或者Quest取得参数后,要对每个参数进行判断处理,发现异常字符,要利用replace函数将异常字符过滤掉,然后再做下一步操作。
第五:只给出一种错误提示信息,服务器都只提示HTTP500错误。
第六:在IIS中为每个网站设置好执行权限。千万别给静态网站以“脚本和可执行”权限。一般情况下给个“纯脚本”权限就够了,对于那些通过网站后台管理中心上传的文件存放的目录,就更吝啬一点吧,执行权限设为“无”好了。
第七:数据库用户的权限配置。对于MS_SQL,如果PUBLIC权限足够使用的绝不给再高的权限,千万不要SA级别的权限随随便便地给。
3.4传漏洞
诸如论坛,同学录等网站系统都提供了文件上传功能,但在网页设计时如果缺少对用户提交参数的过滤,将使得攻击者可以上传网页木马等恶意文件,导致攻击事件的发生。
防文件上传漏洞
在文件上传之前,加入文件类型判断模块,进行过滤,防止ASP、ASA、CER等类型的文件上传。
暴库。暴库,就是通过一些技术手段或者程序漏洞得到数据库的地址,并将数据非法下载到本地。
数据库可能被下载。在IIS+ASP网站中,如果有人通过各种方法获得或者猜到数据库的存储路径和文件名,则该数据库就可以被下载到本地。
数据库可能被解密
由于Access数据库的加密机制比较简单,即使设置了密码,解密也很容易。因此,只要数据库被下载,其信息就没有任何安全性可言了。
防止数据库被下载。由于Access数据库加密机制过于简单,有效地防止数据库被下载,就成了提高ASP+Access解决方案安全性的重中之重。以下两种方法简单、有效。
非常规命名法。为Access数据库文件起一个复杂的非常规名字,并把它放在几个目录下。
使用ODBC数据源。在ASP程序设计中,如果有条件,应尽量