负载均衡器和HTTP_X_FORWARDED_FOR之间的关系是什么?

时间:2016-07-09 00:41:39

标签: php security proxy ip

以下是我对用户IP的理解:

用户的IP为REMOTE_ADDR。但是,如果用户使用代理(如HotSpotSheild(HSS))或代理链,那么REMOTE_ADDR是代理的地址(不是用户的IP),用户的IP可能在其他标题中,如下所示:

  • HTTP_CLIENT_IP
  • HTTP_X_FORWARDED_FOR
  • HTTP_X_FORWARDED
  • HTTP_X_CLUSTER_CLIENT_IP
  • HTTP_FORWARDED_FOR
  • HTTP_FORWARDED
  • 或许没有一个。

因此,当用户使用代理时,他就无法检测到。

问题1:这些标题(上图)中的一个是否已满?其余的都是空的吗?

问题2:我最好将REMOTE_ADDR和其中一个标题(非空)存储在其他字段中数据库? (我的意思是IP有两个独立的列,而不仅仅是一列)

以下是我对负载均衡器的理解:

它是您在运行服务器群集时使用的反向代理服务器。客户端连接到负载均衡器,并将连接转发到其中一个实际服务器。

理论值:

  

如果您使用负载均衡器,请使用HTTP_X_FORWARDED_FOR作为用户的IP。

问题3 当有负载均衡器时,为什么要将bHTTP_X_FORWARDED_FOR存储为用户的IP?我的意思是bHTTP_X_FORWARDED_FOR与负载均衡器有什么关系?

1 个答案:

答案 0 :(得分:2)

这完全是关于信任和具体实施细节的概念。

如果您的系统信任代理服务器(例如,在反向代理情况下),那么您可以信任它在其中一个HTTP标头中传递给您的IP。

如果没有理由信任代理服务器(例如Hotspot Shield等随机互联网代理),那么您的系统不知道传递给您的IP是否已经完成。

您可以根据REMOTE_ADDR获得您信任的服务器白名单,如果您从其中一个获得连接,那么您可以使用HTTP标头中的IP(尽管最好将两者都记录为完整性) 。您可能还希望对此进行扩展,以便某些远程代理可以信任某些标头,否则可能存在安全漏洞,用户提供自己的标头以及设置未受损害的代理。

  

总是其中一个标题(上面)已满?其余的都是空的吗?

取决于代理及其软件实施。

  

在数据库中的不同字段中存储REMOTE_ADDR和其中一个标题(不是空的)是一个好主意吗? (我的意思是IP有两个独立的列,而不仅仅是一列)

是的,存储两者都没有坏处 - 它们可能对任何审计跟踪都有用。

  

为什么我应该在那里存储bHTTP_X_FORWARDED_FOR作为用户的IP   是一个负载均衡器?我的意思是&#bHTTP_X_FORWARDED_FOR要做什么   负载均衡器?

因为您的负载均衡器应该是受信任的代理,因此您应该能够信任它为您提供的IP。