软件安全实验三

实验三防止SQL注入

1.实验目的

学习关于防止SQL的知识,进行SQL注入实验,通过实验体会到SQL注入的危害,学会解决防范SQL注入实验的方法

2.实验环境

Windows10,eclipse,火狐,MySQL

3.实验原理

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

3.1思路:

(1)寻找到SQL注入的位置

(2)判断服务器类型和后台数据库类型

(3)针对不通的服务器和数据库特点进行SQL注入攻击

3.2实验实例

(1)设计一个登录界面,要求输入用户名和密码

(2)可以这样输入实现免帐号登录

img

图 1登录界面

3)点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了

img

图 2正常登录

img

图 3失败登录

img

图 4注入成功

后台认证程序中会有如下的SQL语句:

String sql = "select * from user_table where username=

’ “+userName+” ’ and password=’ “+password+” '";

当输入了上面的用户名和密码,上面的SQL语句变成:

SELECT * FROM user_table WHERE username=

‘’or 1 = 1 – and password=’’

(5)分析SQL语句:

条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;然后后面加两个-,它将后面的语句注释,让他们不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

(6)防止方法

使用Java包里的filter功能.它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response。所以用户发出的任何request都必然经过filter处理,我们就在filter处理用户request包含的敏感关键字,然后replace掉或是让页面转到错误页来提示用户,这样就可以很好的防sql注入了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMJdfVr6-1649239983883)(https://raw.githubusercontent.com/lmy12367/img/main/imgwps6E15.tmp.jpg)]

图 5filter防止代码

img

图 6成功防注入

4.实验心得

通过本次实验体验了一下SQL的防注入实验方法,也在实验过程了解了防止SQL的很多方法远不止通过Java的包防止SQL防注入;看了很多教程等寒假有时间再去试试其他的SQL防注入实验;目前的主流前端框架vue和后端ssm框架都有更加方便快捷的方法,在我实验过程中了解到了通过vue的axios去组织但是我前端界面没有用vue去重构所以没有通过这种方法,我选择使用调用Java的包去进行过滤操作。

5.代码

public class LoginFilter implements Filter{

	public void destroy() {
		
	}

	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
			FilterChain filterChain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)servletRequest;
		HttpServletResponse response = (HttpServletResponse)servletResponse;
		HttpSession session = request.getSession();
		Object object = session.getAttribute("currentUser");
		String path = request.getServletPath();
		if(object == null&&path.indexOf("login")<0&&path.indexOf("bootstrap")<0&&path.indexOf("images")<0) {
			response.sendRedirect("login.jsp");
		}else {
			filterChain.doFilter(servletRequest, servletResponse);
		}
	}

	public void init(FilterConfig arg0) throws ServletException {
		
	}

}

t, servletResponse);
}
}

public void init(FilterConfig arg0) throws ServletException {
	
}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值