前后端不分离:服务端可以通过获取request.getRemoteAddr()获取客户端IP 前后端分离:如果请求经过了代理服务器(Nginx、Apache)或者负载均衡,客户端和服务端之间增加了中间层,那么服务端无法直接拿到客户端的IP,request.getRemoteAddr()可能返回的是代理服务器的IP,此时,可以通过HTTP请求头X-Forwarded-For(或其他自定义请求头)来获取客户端IP 格式为: X-Forwarded-For:client1,proxy1,proxy2(第一个ip为客户端真实ip,后面的为经过的代理服务器ip。现在大部分的代理都会加上这个请求头)
安全编码规范:
1. 配置可信IP白名单,仅允许可信代理设置或修改该头信息。
2. 限制XFF头格式(合法IPv4/IPv6地址、设定最大长度),防范恶意格式注入与缓冲区溢出攻击。
3. 在身份校验和授权中,结合会话标识符、用户令牌等多因素验证,防止伪造导致的认证绕过。