[防御 CSRF 的策略]验证 HTTP Referer 字段

Posted Java小学生的成长日志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[防御 CSRF 的策略]验证 HTTP Referer 字段相关的知识,希望对你有一定的参考价值。

这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。

即便是使用最新的浏览器,黑客无法篡改 Referer 值,这种方法仍然有问题。因为 Referer 值会记录下用户的访问来源,有些用户认为这样会侵犯到他们自己的隐私权,特别是有些组织担心 Referer 值会把组织内网中的某些信息泄露到外网中。因此,用户自己可以设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时,网站会因为请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户的访问。

 

Java 代码示例


 在 Filter 中验证 Referer
 // 从 HTTP 头中取得 Referer 值
 String referer=request.getHeader("Referer"); 
 // 判断 Referer 是否以 bank.example 开头
 if((referer!=null) &&(referer.trim().startsWith(“bank.example”))){ 
    chain.doFilter(request, response); 
 }else{ 
    request.getRequestDispatcher(“error.jsp”).forward(request,response); 
 }

以上代码先取得 Referer 值,然后进行判断,当其非空并以 bank.example 开头时,则继续请求,否则的话可能是 CSRF 攻击,转到 error.jsp 页面。


以上是关于[防御 CSRF 的策略]验证 HTTP Referer 字段的主要内容,如果未能解决你的问题,请参考以下文章

Web前端安全策略之CSRF的攻击与防御

CSRF防御

前端Web前端安全策略之CSRF的攻击与防御

转-CSRF——攻击与防御

浅谈Web前端安全策略xss和csrf,及又该如何预防?

CSRF攻击原理及防御和相关漏洞复现