(网络安全)亲测可用的获取客户端IP的代码(java)

来源:互联网 发布:福州 java 编辑:程序博客网 时间:2024/06/05 14:58

我们在做项目的时候,有时候出于安全的考虑,我们需要确保请求来源是合法的,从而保证接口的安全访问,防御刷单、dos攻击等乱七八糟的网络攻击。


确保请求来源的方法常见的有两种,一种是限制客户端IP,另一种是限制客户端域名。限制客户端域名也称为防盗链,防盗链我后面会专门讲讲,今天只谈一下限制客户端IP。


我们可以通过限制客户端IP的方式,把IP不在白名单之内的请求全部过滤掉,这样在一定程度上提高了项目的安全性。比如,我们在开发项目的时候,有时候需要和其他公司的项目合作,这时我们就通过接口来和合作方的项目进行通讯。在安全级别要求很高的时候,可以通过限制ip,只处理来自于合作方服务器的ip上发来的请求,其他请求一律视为非法请求。这样一来,我们的提供给合作方的接口只能在合作方的服务器上发起调用,确保了接口安全。


正好我这次的项目就有这么一个需求,我们需要提供一个接口给合作方调用,合作方也给我们提供了他们服务器的ip。本来ip限制做不做都行的,但我本着对项目负责的态度,而且以前也没做过这种ip限制,现在正好学习并运用起来。于是我在网上找代码,直接百度。然后百度得来的代码质量参差不齐,我试了很多从百度上面的代码,发现有没有效果,即不能正确获取到ip,没办法只能继续找,找不到再上google找。幸好最后还是找到了,这段代码能正确获取到请求方的ip:



public static String getIp(HttpServletRequest request) {    String ip = request.getHeader("X-Forwarded-For");    if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){            //多次反向代理后会有多个ip值,第一个ip才是真实ip            int index = ip.indexOf(",");            if(index != -1){                return ip.substring(0,index);            }else{                return ip;           }        }        ip = request.getHeader("X-Real-IP");               if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){    return ip;        }                return request.getRemoteAddr();   }


以上代码我用natapp和vps测过,确实能用,需要的朋友可以直接拷过去并根据项目需求来改造。


在互联网高速发展的今天,网络安全事件愈发频繁发生,网络安全值得人们的重视。而我所在的公司,确实遭到过不少网络攻击,所以在这里我想说一句,即使身为开发人员,我们也应该多学习一下网络安全的知识,并运用在代码上,虽然我们没有办法完全防御黑客的攻击,但至少能提供他们的攻击门槛和攻击成本,起码可以先拖延住他们,等公司找来专业的安全领域的人员来和他们博弈,将损失减到尽可能小。


最后,本文只起到抛砖引玉的作用,需要深入了解的同学请移步原文:

http://www.cnblogs.com/ITtangtang/p/3927768.html

原创粉丝点击