实训Web安全加固

实训Web安全加固

实验目的

了解SQL注入的概念和基本原理。

了解XSS跨站的概念和基本原理。

了解上传漏洞的概念和基本原理。

掌握避免SQL注入攻击的基本方法。

掌握避免XSS跨站进行攻击的基本方法。

掌握避免上传漏洞进行攻击的基本方法。

实验准备及注意事项

1.硬件:装有Windows操作系统的计算机1台。

2.软件:myeclipse、sqlserver、blog项目。

3.严格按照实验步骤进行实验,实验结果以截图的形式进行保留。

实验任务1 SQL注入防范

1. 运行项目,在用户登录界面用户名处输入万能密码admin' or 1=1 --',密码处输入任意字符,点击登录,观察是否能绕过后台登录系统。

 

 

原因:项目使用PreparedStatement方法完成SQL语句的执行,该方法要求在执行SQL语句之前,必须告诉JDBC哪些值作为输入参数,解决了普通Statement方法的注入问题,极大的提高了SQL语句执行的安全性。

2、在项目中找到用户登录模块所使用的关键SQL语句。

3、修改登录模块的SQL查询相关语句如下所示:

	public UserSingle getLogoner(Object[] params) throws SQLException{
		UserSingle logoner=null;
		String sql="select * from tb_user where user_name='"+params[0]+"' and user_pswd='"+params[1]+"'";
		List list=getList(sql,null);
		if(list!=null&&list.size()!=0)
			logoner=(UserSingle)list.get(0);
		return logoner;		
	}
	

 

4、再次运行项目,使用万能密码admin' or 1=1 --'进行登录,观察是否能够成功登录,登录的是谁的账号,思考原因。

答:登录的是稻草人的账号,默认登录数据库中第一个用户。

 

 

 

实验任务2 XSS跨站防范

1、运行项目,在网站中寻找能够提交信息的文本框。

2、提交JS代码:

<script>alert("xxx")</script>

,观察代码是否生效。

 

3、在项目中编写代码,在用户提交留言和评论信息时将<和>分别替换为>;和<。

		content=content.replace("<","&lt;");
		content=content.replace(">","&gt;");

 

 

原因:在HTML中,某些字符是预留的。例如小于号 < 和大于号 > ,浏览器在解析他们时会误认为它们是标签。如果希望正确地显示预留字符,我们必须在HTML源代码中使用字符实体(character entities)。

常见字符的实体转换表

显示结果

描述

实体名称

实体编号

 

空格

 

 

<

小于号

<

<

>

大于号

>

>

&

和号

&

&

"

引号

"

"

'

撇号

' (IE不支持)

'

4、再次在留言板和文章评论中提交JS代码:<script>alert("xxx")</script>,观察提交的代码是否能够正常显示。

 

 

实验任务3 上传攻击防范

1. 运行项目,在网站中寻找能够上传文件的位置,尝试上传菜刀马。

 

2. 分析项目源代码,找到项目在哪里对上传文件类型做了何种限制。

做了允许上传文件类型设置

if("upload".equals(type)){												//单击"上传图片"提交按钮触发的请求
			try {
				SmartUpload myup=new SmartUpload();
				myup.initialize(this, request, response);
				myup.setAllowedFilesList("jpg,png,gif");						//设置允许上传的文件类型
				myup.upload();													//上传文件
				File upfile=myup.getFiles().getFile(0);							//获取上传的文件。因为只上传了一个文件,所以只有一个元素
				
				message=validateUpLoad(upfile);									//验证上传的文件的大小
				if(message.equals("")){											//通过验证
					Date now=new Date();										//获取当前时间
					String src=Change.getSerial(now)+"."+upfile.getFileExt();
					String info=myup.getRequest().getParameter("info");
					
					if(info==null||info.equals(""))
						info="我的图片";
					String time=Change.dateTimeChange(now);
					
					Object[] params={whoid,src,info,time};
					PhotoDao photoDao=new PhotoDao();
					int i=photoDao.upLoad(params);
					if(i<=0)
						message="图片上传失败!";
					else{
						upfile.saveAs("images/photo/"+src,File.SAVEAS_VIRTUAL);					//保存文件到磁盘中
						message="图片上传成功!";
					}					
				}				

 

3. 将菜刀马的文件后缀修改为图片类型,观察是否能够上传。

 

4. 注释掉文件上传限制,上传jsp后缀的菜刀马,观察是否能够正常使用。

 

 

实验总结

  1. 如何防范SQL注入?

1、使用参数化筛选语句

为了防止SQL注入,用户输入不能直接嵌入到SQL语句中。相反,用户输入必须被过滤或参数化。参数语句使用参数,而不是将用户输入嵌入语句中。在大多数情况下,SQL语句是正确的。然后,用户输入仅限于一个参数。

一般来说,有两种方法可以确保应用程序不易受到SQL注入攻击。一种是使用代码审查,另一种是强制使用参数化语句。强制使用参数化语句意味着在运行时将拒绝嵌入用户输入中的SQL语句。但是,目前对此功能的支持不多。

2、避免使用解释程序,这是黑客用来执行非法命令的手段。

3、防止SQL注入,但也避免一些详细的错误消息,因为黑客可以使用这些消息。标准的输入验证机制用于验证所有输入数据的长度、类型、语句和企业规则。

4、使用专业的漏洞扫描工具。

但是,防范SQL注入攻击是不够的。攻击者现在自动搜索和攻击目标。它的技术甚至可以很容易地应用于其他Web体系结构中的漏洞。企业应该投资于专业的漏洞扫描工具,如著名的Accunetix网络漏洞扫描程序。完美的漏洞扫描器不同于网络扫描器,它专门在网站上查找SQL注入漏洞。最新的漏洞扫描程序可以找到最新发现的漏洞。

5、最后,企业在Web应用程序开发过程的所有阶段执行代码安全检查。首先,安全测试应该在部署Web应用程序之前实现,这比以前更重要、更深远。企业还应在部署后使用漏洞扫描工具和站点监控工具测试网站。

2、如何防范XSS跨站?

https://blog.csdn.net/qq_45886314/article/details/116485139

3、如何防范上传攻击?

https://blog.csdn.net/lisheng19870305/article/details/78673655

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值