常见Web安全漏洞及其防御

常见Web安全漏洞及其防御

1.1 XSS攻击

1.1.1 什么是XSS攻击手段

XSS攻击其实就是使用Javascript脚本注入进行攻击,因为浏览器默认支持脚本语言执行,如果在表单提交的时候,提交一些脚本参数,浏览器可能就直接执行了

攻击常见与论坛的评论

例如“提交表单后,展示到另一个页面”这个功能,可能会受到XSS脚本注入,本地cookie被读取,远程发送给黑客服务器端,然后可以伪造来发起请求

还可能会被<script>window.location.href='http://www.pdc.com';</script>这样的脚本重新定位,钓鱼网站就是这个思路,跳转到脚本里面的网站后,根据url里的银行卡账号密码,就把钱转到自己户下了

1.1.2 如何防御XSS攻击

将脚本特殊字符,如<、>,转换成html源代码(&lt为<)进行展示。

过程:编写一个过滤器拦截所有getParameter参数,重写httpservletwrapp方法,将参数特殊字符转换成html源代码保存,如>转换为&gt进行展示,这样就能防止XSS攻击了

// 重写HttpServletRequestWrapper 防止XSS攻击
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
   
    
	private HttpServletRequest request;

	/**
	 * @param request
	 */
	public XssHttpServletRequestWrapper(HttpServletRequest request) {
   
		super(request);
		this.request = request;
	}

	@Override
	public String getParameter(String name) {
   
		// 过滤getParameter参数 检查是否有特殊字符
		String value = super.getParameter(name);
		System.out.println("value:" + value);
		if (!StringUtils.isEmpty(value)) {
   
			// 将中文转换为字符编码格式,将特殊字符变为html源代码保存
			value = StringEscapeUtils.escapeHtml(value);
			System.out.println("newValue:" + value);
		}
		return value;
	}
}

1.2 SQL注入

1.2.1 什么是SQL注入

SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库执行一些恶意的操作。

造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码(如or 1=1

1.2.2 SQL注入防攻击手段

如果程序代码中,dao层的sql语句如果使用sql语句拼接方式,那么就有可能会有注入的问题,因此建议传递参数时使用#,而不是$

1.2.3 MyBatis中 #与$的区别

#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符,可以防止SQL注入问题。

${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

1.3 Http请求防盗链

1.3.1 什么是防盗链

可以对二进制文件进行判断是否可以使用

比如A网站有一张图片/视频,被B网站直接通过img标签属性引入url,直接盗用A网站图片展示/视频播放的话是展示不了的

网关的黑名单/白名单权限判断的底层技术就是防盗链,限制只有合作(付费)的公司才可以调用我们的接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值