【网站渗透测试实战演练】怎样恰当根据IP仿冒完成微信刷票系统漏洞利润最大化
网警文化教育
塑造网络信息安全优秀人才
行业交流、学习培训资询基本基本原理
1、难题情况
在Web应用程序开发中,常常会必须获得手机客户端IP地址。一个典型性的事例便是投票系统软件,为了更好地避免 刷票,必须限定每一个IP地址只有投票一次。
2、怎样获得手机客户端IP
在Java中,获得手机客户端IP最立即的方法便是应用request.getRemoteAddr()。这类方法能获得到连接网络的手机客户端IP,在中间沒有代理商的状况下,确实是非常简单合理的方法。可是现阶段互联网技术Web运用非常少会将网站服务器立即对外开放出示服务项目,一般都是会有一层Nginx做反向代理和三层交换机,有的乃至很有可能有双层代理商。在有反向代理的状况下,立即应用request.getRemoteAddr()获得到的IP地址是Nginx所属网络服务器的IP地址,而不是手机客户端的IP。
HTTP协议书是根据TCP协议书的,因为request.getRemoteAddr()获得到的是TCP层立即联接的手机客户端的IP,针对Web网站服务器而言立即联接它的手机客户端事实上是Nginx,也就是TCP层是拿不上真正手机客户端的IP。
为了更好地处理上边的难题,许多 HTTP代理会在HTTP协议书头中加上X-Forwarded-For头,用于跟踪要求的来源于。X-Forwarded-For的文件格式以下:1X-Forwarded-For: client1, proxy1, proxy2
X-Forwarded-For包含好几个IP地址,每一个值根据分号 空格符分离,最左侧(client1)是最初手机客户端的IP地址,正中间如果有双层代理商,每一层代理会将联接它的手机客户端IP增加在X-Forwarded-For右侧。
下边便是一种常见的获得手机客户端真正IP的方式,最先从HTTP头里获得X-Forwarded-For,假如X-Forwarded-For头存有就按分号隔开取最左侧第一个IP地址,不会有立即根据request.getRemoteAddr()获得IP地址:1public String getClientIp(HttpServletRequest request) {2 String xff = request.getHeader("X-Forwarded-For");3 if (xff == null) {4 return request.getRemoteAddr();5 } else {6 return xff.contains(",") ? xff.split #p#分页标题#e#