获取客户端IP的安全隐患,及是否有安全的获取代理后的客户真实IP的方式

finemi 2016-09-05 11:51:36
先贴一个网上普遍写的获取IP的方式:

public static String getClientIP(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if(ip!=null){
ip = ip.trim().split(",")[0];
if(ip.equals("0:0:0:0:0:0:0:1")) ip = "127.0.0.1";
}
return ip;
}


之前我也一直用的这个方法,但是今天无意中看到一篇文章,才突然意识到这里有一个大的安全问题:
客户端可以通过修改"x-forwarded-for"头,来任意伪造IP地址
进过测试,也确实如此!

而实际上现在网上很多网站几乎都是通过这几个头信息来达到获取被代理后的客户端的真实IP的目的。

所以想问一下,如果要获取被代理后的客户端真实IP,是否有什么更安全的方式?
...全文
228 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
java竹雨 2016-09-05
  • 打赏
  • 举报
回复
没有什么好的方法 获取IP本身就有一定的隐患
  • 打赏
  • 举报
回复
额 我也是用的这一种方式获取客户端IP 其实安全方面的话主要看用在哪一个方面吧 如果获取IP的主要目的只是为了记录信息 而不是必须依赖IP来进行某些操作的话就没有什么问题呀 如果必须依赖IP的程序本身就是不安全的吧

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧