Servelt学习:SQL注入漏洞及其避免方法

原创 2012年03月23日 19:49:07

SQL注入漏洞是指执行查询语句时在正常的查询语句之后加入 or 1='1'

例如将语句select * FROM [Students].[dbo].[User] where name='admin' and passwd='123'改写为

select * FROM [Students].[dbo].[User] where name='admin' and passwd='123' or 1='1'时便可以查询出数据表中全部内容(甚至name与passwd值可以随意乱填)

正常情况时得到正确的查询结果:

用户名或密码错误则无法获得查询结果

而在正常的查询语句之后加入or 1='1'却可以得到整个表的查询结果

黑客有可能利用SQL漏洞对网站进行攻击。其可以在用户名称栏中随意输入字符,密码栏中输入XXX' or 1='1便可以进入网站。

例如:

(数据库中无该用户)

 

(由于SQL漏洞,页面成功跳转)

 

解决方法:

不要用户名和密码同时进行验证,而是通过用户名去查询数据库,返回一个密码。然后用该密码与用户输入密码进行比较,如果相同则用户合法,否则为非法用户。

将查询语句:

ps=ct.prepareStatement("select top 1 * from [Students].[dbo].[User] where name='"+u+"'and passwd='"+p+"'");
rs=ps.executeQuery();
      if(rs.next())
       {
       
       //跳转到welcome
       res.sendRedirect("Wel?user="+u+"&pass="+p);
       //HttpSession hs=req.getSession(true);
       //hs.setAttribute("uname",u);
       }else
      {
       res.sendRedirect("login");//写需要跳转的servlet的那个url
      }


改为:

	ps=ct.prepareStatement("select top 1 passwd from [Students].[dbo].[User] where name='"+u+"'");
    		rs=ps.executeQuery();
    	                 if(rs.next())
    		{
    			String dbPasswd=rs.getString(1);
    			System.out.println(dbPasswd);
    			 if(dbPasswd.equals(p))
    		  
    			 {
    			 	 System.out.println(dbPasswd);
    			 	 res.sendRedirect("Wel?user="+u+"&pass="+p);       
    			     HttpSession hs=req.getSession(true);       
    			     hs.setAttribute("uname",u);  
    			 }
    		
    		
    		}else//说明用户名不存在
    		{
    			res.sendRedirect("login");//写需要跳转的servlet的那个url
    		}


 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

代码注入漏洞以及修复方法

PHP代码执行漏洞指应用程序本身过滤不严格,用户可以通过请求将代码注入到程序中执行,类似于SQL注入漏洞,可以把SQL语句通过网页注入到SQL服务执行,而PHP代码执行漏洞则是可以把代码注入应用到网站...
  • pygain
  • pygain
  • 2016年10月12日 17:32
  • 1873

C#防SQL注入代码的三种方法

C#防SQL注入代码的三种方法
  • wkl115211
  • wkl115211
  • 2017年08月07日 14:20
  • 1280

SQL注入原理讲解,很不错!

原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据...
  • stilling2006
  • stilling2006
  • 2013年01月21日 21:48
  • 344131

手动漏洞挖掘-SQL注入小谈

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 服务器端程序将用户输入参数做为查询条件,直接拼接SQL语句,并将查询...
  • qq_33936481
  • qq_33936481
  • 2016年04月25日 20:53
  • 2512

SQL 注入学习(来自freebuf的总结)

分类学习有利于条理化知识,大致的SQL注入分为三种: 1.BealeanBase 2.TimeBase 3.ErrorBase 1.从最简单的说起,基于布尔类型是最常见的SQL注入方式 ...
  • zhx278171313
  • zhx278171313
  • 2014年04月15日 20:51
  • 4280

php sql注入漏洞与修复

出于安全考虑,需要过滤从页面传递过来的字符。 通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。 轻则数据遭到泄露,重则服务器被拿下。  一、SQL注入的...
  • vip_linux
  • vip_linux
  • 2014年01月24日 21:20
  • 872

sql注入漏洞的一种实例

在做毕业设计的时候,竟然碰到了一中叫sql注入漏洞的现象。   当笔者用一条sql语句查询时,select * from users where username='zf' and passwd='z...
  • zhuofeng85
  • zhuofeng85
  • 2013年10月27日 22:50
  • 2196

注入漏洞检测关键字

个人从网上和一些教程钟归纳了一些批量搜索注入点的关键字,分享给大家使用,    内容不多,但实用性还是蛮强的,保证能找到注入点,但是有些MD5加密之后不能解开,那也没有办法。有些关键字还可以扩展,寻...
  • dongjunhua
  • dongjunhua
  • 2013年03月01日 22:38
  • 12390

简单分析什么是SQL注入漏洞

现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的。但是事实是这样吗?我们学这些,不仅要知其然,更要知其所以然!...
  • Terminator_botao
  • Terminator_botao
  • 2015年01月22日 16:54
  • 385

SQL注入——漏洞全接触(高级篇)

看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提高猜解效率?请大家接着往下看高级篇。 第一节、利用...
  • Shiyaru1314
  • Shiyaru1314
  • 2015年10月10日 13:48
  • 650
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Servelt学习:SQL注入漏洞及其避免方法
举报原因:
原因补充:

(最多只允许输入30个字)