j2ee sql注入对web应用的影响

来源:互联网 发布:网络灯谜精选汇总 编辑:程序博客网 时间:2024/05/20 18:55

首先来简述一下sql注入的含义,只要应用程序里出现和数据库打交道,那么必定会有sql语句的产生,那么如果有sql语句,就必定会从view层接受一些用户的数据来组装sql语句。如果有这样的过程,那么无论是何种应用程序都会引发注入。现it行业逐渐兴起,门槛逐渐降低,程序员的标准越来越差,导致很多程序员写程序不符合标准,而导致sql注入的产生。如果web服务器上的数据是非常重要,那么由此可能造成很大的损失,举个例子,如果某黑客发现某域名存在sql注入漏洞,并成功利用,这时黑客执行了 drop database XXX这样的语句,可想有多严重,有些黑客则会爆破数据库表内用户的重要信息,这时会被刚才更加严重。

 

我们首先理解sql注入的产生过程,select count(*) from userinfo where username = ' ' and password = ' ';

这是一条普通的不能再普通的查询语句,用于查询用户名是否匹配,并返回,在此语句的基础上,我们查看程序内此语句的应用方式:

java :

ResultSet result = statment.execute("select * from userinfo where username = ' "+request.getParmater("username")+"' and password = ' "+request.getParmater("password")+"' ")

while(result.next())

{

     XXXXXXX;

}

 

c#

DataReader reader = cmd.query("select * from userinfo where username = ' "+request.getParmater("username")+"' and password = ' "+request.getParmater("password")+"' ")

while(reader.move())

{

    XXXX;

}

 

如果有像上面类似的获取数据的方法,对服务器将会是致命的。举例,现有客户进行登录:

客户1: 传入用户名:admin  密码:admin;     (不会有任何问题)

黑客:传入用户名:admin' or 1=1 ;--  密码:XXXXX    (会触发永真条件)

我们试着拼出这个永真条件的sql语句并分析一下

select count(*) from userinfo where username = 'admin' or 1=1 ;-- ' and password = ' '

很明显,and password部分被攻击者注释掉了,结果or 1=1返回了永真的条件。

在此提示,只有sqlserver 和mysql 可以执行语句链,(用分号隔开的语句,可以同时执行), oracle则不能,必须要使用pl/sql

sqlserver和mysql漏洞诸多,尤其是1433端口,会成为黑客首选的攻击目标。