如果Request.ServerVariables ["HTTP_X_FORWARDED_FOR"]返回多个ip,我会采取哪一个,如何在c#中执行?我的理解是,如果它是空的或null,那么客户端计算机不通过代理,我可以从Request.ServerVariables ["REMOTE_ADDR"]获取它们的ip.这是正确的陈述吗?
通过"我应该选择哪一个",我的意思是我将列表中的第一个IP或最后一个IP取出来,而我所要做的就是将其拆分为一个数组并取出我想要的数据.我不确定HTTP_X_FORWARDED_FOR是如何工作的.
Azi*_*ziz 38
根据此,格式X -转发,对于HTTP标头是:
X-Forwarded-For: client1, proxy1, proxy2, ...
Run Code Online (Sandbox Code Playgroud)
因此,您想要的客户端的IP地址应该是列表中的第一个
关于可靠性主题的进一步说明:
任何人都可以通过使用诸如 Firefox 插件“篡改数据”或他们自己的本地代理(例如 Privoxy)之类的工具来伪造 HTTP_X_FORWARDED_FOR。这意味着整个字符串可能是假的,并且 REMOTE_ADDR 是实际的原始主机。这也可能意味着第一个“client1”地址是伪造的,然后客户端通过代理连接,导致 proxy1 是客户端的 IP 地址,而 REMOTE_ADDR 是使用的单个代理。
如果您希望基于 IP 拒绝访问,我建议检查 XFF 标头中的每个 IP 地址以及 REMOTE_ADDR。
如果您希望根据 IP 区域授予访问权限,我建议仅在 XFF 为空白且 IP 来自正确区域时才允许访问。
然而,正如 Mastermind 已经指出的那样,有些代理会隐藏代理链。例如,Tor 网络将使请求看起来好像来自最终代理机器,而不是原始 IP。匿名代理通常会声称它们转发的 IP 与 REMOTE_ADDR 中报告的 IP 相同。
基于 IP 的过滤通常是一种非常粗糙的访问控制的最后手段。
| 归档时间: |
|
| 查看次数: |
24540 次 |
| 最近记录: |