XSS与CSRF攻击防御概念

先看这两篇文章:XSS攻击原理及防御措施  CSRF攻击介绍及防御

攻击概念

CSRF跨站请求伪造(Cross-site request forgery)跟XSS攻击一样,存在巨大的危害性。

CSRF攻击:攻击者盗用了你的身份信息,以你的名义发送恶意请求。带来的后果就是:个人隐私泄露以及财产安全。
CSRF攻击的思想:
1、登录受信任网站A,并在本地生成Cookie;
2、在不登出A的情况下,访问危险网站B;
3、B要求访问第三方站点A,发出一个请求;
4、根据B的请求,浏览器带着1产生的Cookie访问A;
5、A不知道4中的请求是A发出的还是B发出的,A直接根据用户的权限处理请求,这样B就达到了模拟用户操作的目的。

防御

验证 HTTP Referer 字段,参考文章开篇文章的防御方法一。

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory,用户必须先登陆 bank.example,然后通过点击页面上的按钮来触发转账事件。这时,该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL,通常是以 bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

具体做法

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
	String referer = request.getHeader("Referer");
	if(!WebUtils.valideCSRFAddress(referer)) {
		logger.error("=================referer===============" + referer);
		return false;
	}
}
public static String[] domainList= { "app.bank.example.com", "data.bank.example.com", "oss.bank.example.com", "bank.example.com", "www.hiifit.com", "www.hiifit.net" };

public static boolean valideCSRFAddress(String referer) {
	if(StringUtils.isEmpty(referer)) {
		return false;
	}
	if (referer.contains("?")) {
	    referer = referer.substring(0, referer.indexOf("?"));
	}
	URI referUri = null;
	try {
	    referUri = new URI(referer);
	} catch (Exception e) {
		e.printStackTrace();
	    return false;
	}
	String domain = referUri.getHost().toLowerCase();
	for (int i = 0; i < domainList.length; i++) {
	    if (domainList[i].toLowerCase().equals(domain)) {
		return true;
	    }
	}
	return false;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值